【发布时间】:2020-12-23 05:20:41
【问题描述】:
我正试图从一个非常大的数据集中找出每日频繁访问者的趋势。在这种情况下,常访问者是指在连续 3 天的周期中,在不同的 2 天使用的访问者 ID。
我的数据集如下所示:
ID | Date | Location | State | Brand |
1 | 2020-01-02 | A | CA | XYZ |
1 | 2020-01-03 | A | CA | BCA |
1 | 2020-01-04 | A | CA | XYZ |
1 | 2020-01-06 | A | CA | YQR |
1 | 2020-01-06 | A | WA | XYZ |
2 | 2020-01-02 | A | CA | XYZ |
2 | 2020-01-05 | A | CA | XYZ |
这就是我想要的结果。访问列中的计数等于日期列中的不同天数,每个 ID 为 -2 天。所以对于 2020-01-05 的 ID 1,3 号和 4 号都有访问,所以计数是 2。
Date | ID | Visits | Frequent Prior 3 Days
2020-01-01 |Null| Null | Null
2020-01-02 | 1 | 1 | No
2020-01-02 | 2 | 1 | No
2020-01-03 | 1 | 2 | Yes
2020-01-03 | 2 | 1 | No
2020-01-04 | 1 | 3 | Yes
2020-01-04 | 2 | 1 | No
2020-01-05 | 1 | 2 | Yes
2020-01-05 | 2 | 1 | No
2020-01-06 | 1 | 2 | Yes
2020-01-06 | 2 | 1 | No
2020-01-07 | 1 | 1 | No
2020-01-07 | 2 | 1 | No
2020-01-08 | 1 | 1 | No
2020-01-09 | 1 | null | Null
我最初尝试使用以下行来获取访问列的结果,但在该 ID 最先达到 3 的任何日期,每个连续行中的结果都是 3。
,
count(ID) over (Partition by ID order by Date ASC rows between 3 preceding and current row) as visits
我搜索了论坛,但每个有点相似的问题似乎都涉及计算值而不是日期,并且无法弄清楚如何调整以获得我需要的东西。非常感谢任何帮助。
【问题讨论】:
-
你已经标记了 MySQL 和 SQL Server...请删除不必要的。
标签: sql date datetime count window-functions