SQL中如何一直获取前一天的的数据,直到数据不为空

在SQL中存放数据,大致内容如下

image.png

在报表中需要获取该物品今日的数量和昨日的数量,如果前一天没有数据,则获取再前一天的数据,直到那天数量一栏有数据

比如AA物品,获取今日(11.26)数量为2,昨日(11.25)没有数据,则再去获取11.24日的数量

请问这个在SQL中要如何编写语句


感谢评论区大家提供的思路 ,最佳回答是比较适用问题实际情况的,其他回答也很棒

根据最佳答案的思路,更改的适合问题的SQL语句

SELECT 数量 FROM 表
WHERE 日期 =
(SELECT "max"(日期)  FROM 表 WHERE 日期 <> CURRENT_DATE)


访客登录 发布于 2020-11-26 13:41 (编辑于 2020-11-26 15:24)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
1
4488Lv5初级互助
发布于2020-11-26 13:49

如果今天的数据确定有的话可以把今天的日期去掉,求数量不为空的最大日期
select date from table where 数量 is not null and date <> today

最佳回答
1
格调Lv6初级互助
发布于2020-11-26 13:46(编辑于 2020-11-26 13:48)

利用开窗函数

row_number() over ( partition by 分组列 order by 日期 desc) nos1


需求:取第一条和第二条

然后取 nos1 等于 1和等于2 的


大前提是你的没有数据 是指没有这条记录,并不是指有记录,数量为null的

  • 访客登录 访客登录(提问者) 那这个方法可能就不太适用了,谢谢提供思路
    2020-11-26 13:54 
  • 格调 格调 回复 访客登录(提问者) 如果有为null,可以在where后面过滤掉
    2020-11-26 13:56 
最佳回答
1
HHHHH123Lv7中级互助
发布于2020-11-26 14:00

SELECT LAG(数量) OVER(partition BY 名称 ORDER BY 日期) from 表  获取每一条记录对应上一条信息,partition BY为隔断字段,ORDER BY排序依据

最佳回答
1
ShenRuiALv5见习互助
发布于2020-11-26 14:04

思路貌似一致,你用where条件过滤掉没有值得那些数据,然后到排序去最新的一条。

  • 5关注人数
  • 958浏览人数
  • 最后回答于:2020-11-26 15:24
    请选择关闭问题的原因
    确定 取消
    返回顶部