Mysql 在每日销售数据库中添加包含昨天销售信息的列
我正在使用一个包含不同产品和商店的每日销售信息的数据库Mysql 在每日销售数据库中添加包含昨天销售信息的列,mysql,sql,apache-spark-sql,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 Uni
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是否能做到这一点。如果没有,你能推荐一种方法吗?考虑到有超过数千条记录。您可能正在寻找滞后: 或者,您可以将左连接与日期算术结合使用。这因数据库而异,但标准是:
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。对于数据库引擎,我有一点自由:可以是mysql、spark sql、microsoft sql等。这两个查询都很好,但我会选择第二个查询,因为有些产品在几天内没有销售。你能在第二个问题中再详细说明一下吗?我不明白你是如何得到tprev表的数据的,我得到了很多列中都有null的行,所以我认为这与连接语句有关。@BenJ。那可能是一天之后所有商店都关门的日子——比如假期。如果是这样的话,只有rev|u unitssale是空的,而不是整排,对吧?它不起作用:| a-1102767 | 02-12-2018 | 2 | Null | a-1102767 | 03-12-2018 | 1 | Null | BenJ。如果表本身中的值为NULL,则只会在与左联接中的第一个表关联的列中获得NULL。
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';