如何每天为每个唯一标识符快速创建一行?

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”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tag postgresql, oracle, sql-server, db2, ... 【参考方案1】:

您可以使用cross joinleft 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

以上是关于如何每天为每个唯一标识符快速创建一行?的主要内容,如果未能解决你的问题,请参考以下文章

Jquery .ajax():唯一的 AJAX 查询标识符?

在django中生成唯一的字母数字标识符[重复]

Swift:如何以编程方式获取iOS设备的唯一标识符?

SQL:如何选择每个唯一标识符的值最低的记录

如何唯一标识 UITableView 中的每个单元格

为无向循环序列创建唯一标识符