如何每天为每个唯一标识符快速创建一行?
Posted
技术标签:
【中文标题】如何每天为每个唯一标识符快速创建一行?【英文标题】:How can I quickly create a row per day per unique identifier? 【发布时间】:2019-11-06 15:44:34 【问题描述】:我来自 SAS 背景,对 SQL 比较陌生。我觉得有一个非常简单的解决方案......
我有两个表 - 一个日期维度和一个包含三列的表 - 客户编号、日期和事件标志。
我想构建一个数据集,为每个客户生成完整的 365 天历史记录。
所以,例如我的事件表有这个
CustomerNumber - Date - Event
12345 24/02/2019 1
12345 28/02/2019 1
我想要一张能做到这一点的桌子;
CustomerNumber - Date - Event
12345 24/02/2019 1
12345 25/02/2019 0
12345 26/02/2019 0
12345 27/02/2019 0
12345 28/02/2019 1
当我加入日期维度时,我可以轻松地正确显示日期和事件列,但我会在事件表中没有记录的 CustomerNumber 字段中获得 NULL。
我需要保留客户编号,以便我可以每天为每个唯一客户运行窗口化的 30 天总计。
【问题讨论】:
dba.stackexchange.com/questions/138672/… 您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tagpostgresql
, oracle
, sql-server
, db2
, ...
【参考方案1】:
您可以使用cross join
和left join
:
select c.customernumber, d.date,
coalesce(t2.event, 0) as event
from dates d cross join
(select distinct customernumber from table2) c left join
table2 t2
on t2.date = d.date and t2.customernumber = c.customernumber;
您可以添加where
子句以过滤特定时间段内的d.date
。
【讨论】:
谢谢你,Gordon,这是一种享受。我将开始阅读 Cross Join以上是关于如何每天为每个唯一标识符快速创建一行?的主要内容,如果未能解决你的问题,请参考以下文章