求问各位,同一数值字段,根据不同时间计算差值的sql语句应该怎么写呀~
打个比方,a字段是累计流水,dt是时间,18号的a字段为18号的累计流水,如要知道18号的日流水,非累计流水
就需要拿18号的a字段-17号的a字段,应该怎么写呢
1.如果你的日期是连续的,可以用位偏移量函数,lag(字段a,1,0)over(order by dt),它的意思是我根据dt字段排序顺序,取每行的字段a数据偏移一行,如果找不到数据显示为0,也就是18日这行数据,我可以加一个字段,这个字段是17日的字段a数据。
2. sql实现: select t.dt,
t.a-lag(字段a,1,0)over(order by dt) as 每日流水 from table t;
3.注意:如果你的日期不连续,lag函数会出问题,比如16号数据缺失,17日上一行数据就变成15日的,算17日流水会变成:17日累计流水-15日累计流水,数据就会出错。解决这种问题的方法就是用表自关联,拿本表和本表日期–1进行左外连接,这种就可以解决了。
这个SQL稍稍有些复杂,你可以单独加我好友,然后提供数据,或者环境,SQL需要特定编写。