SQL创建“滞后列”

时间:2018-04-23 04:47:14

标签: sql sql-server tsql

我正在努力尝试在T-SQL中创建一个表。我的原始表非常简单,它是每天的销售表和日期:

    Date          Revenue 
-----------      ---------
2018-02-01       151.00 
2018-02-02       200.00
2018-02-03       300.00

等等..

我想要做的是创建一个表格,其中包含日期列,此日期的销售额(因此只是此表格列的副本),但现在添加了一个日期减去一天的列,以及此修改日期的销售额:

 Date             Revenue       Day Before         Revenue on Day Before     
-----------      ---------      -----------      ------------------------
2018-02-01       151.00          2018-01-31            99.00
2018-02-02       200.00          2018-02-01           151.00
2018-02-03       300.00          2018-02-02           200.00

2 个答案:

答案 0 :(得分:3)

您是否尝试过lag()功能?

select Date, Revenue,
       lag(Date) over (order by ?) as  [Day Before],
       lag(Revenue) over (order by ?) as  [Revenue on Day Before]
from table t;

使用可以指定实际数据排序的排序列而不是?(即row_idid

答案 1 :(得分:1)

试试这个:

select [Date],
       [Revenue],
       DATEADD(day, -1, [Date]) [DayBefore]
       (select [Revenue] from MY_TABLE where [Date] = DATEADD(day, -1, [Date])) [RevenueDayBefore]
from MY_TABLE

在@YogeshSharma提出的解决方案中,如果由LAG提取的“上一行”不是前一天,那么结果将是错误的。在我的方法中,您始终确定,在其他列中,始终存在前一天的数据(尽管表中存在实际数据 - 在这种情况下,它将是null)。但是,我的解决方案假定,表中的日期是唯一的。