我正在使用一个数据库,其中包含不同产品和商店的每日销售信息。
StoreSku Date UnitsSale
A-2134 20/04/2019 2
A-2135 20/04/2019 1
A-2134 19/04/2019 5
A-2134 18/04/2019 3
A-2135 19/04/2019 6
我想添加一列,其中包含前一天的单位销售信息
StoreSku Date UnitsSale OneDaySales
A-2134 20/04/2019 2 5
A-2135 20/04/2019 1 6
A-2134 19/04/2019 5 3
A-2134 18/04/2019 3 NULL
A-2135 19/04/2019 6 NULL
老实说,我不知道sql是否能够实现这一目标。如果没有,您能推荐一种方法吗?考虑到有数千条记录。
答案 0 :(得分:1)
您可能正在寻找lag()
:
select t.*,
lag(UnitsSale) over (partition by StoreSku order by Date) as prev_unitsSale
from t;
或者,您可以将left join
与日期算术一起使用。这因数据库而异,但是标准是:
select t.*, tprev.UnitsSale as prev_unitssale
from t left join
t tprev
on tprev.StoreSku = t.StoreSku and
tprev.Date = t.date - interval '1 day';
这些并不完全等效。第一个将获得数据中的前一天。第二秒将是前一天-缺少日期后的第二天为NULL
。