在每日销售数据库中添加带有昨天销售信息的列

时间:2019-04-22 20:44:07

标签: mysql sql apache-spark-sql

我正在使用一个数据库,其中包含不同产品和商店的每日销售信息。

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是否能够实现这一目标。如果没有,您能推荐一种方法吗?考虑到有数千条记录。

1 个答案:

答案 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