我正在努力尝试在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
答案 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_id
或id
)
答案 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
)。但是,我的解决方案假定,表中的日期是唯一的。