【发布时间】:2020-11-30 16:44:46
【问题描述】:
因此,在查看了似乎是一个常见问题并且无法找到任何适合我的解决方案之后,我决定我应该问自己。
我有一个包含两列的数据集:session_start_time, uid
我正在尝试生成 30 天的独特会话滚动统计
查询每天唯一uid的数量很简单:
SELECT
COUNT(DISTINCT(uid))
FROM segment_clean.users_sessions
WHERE session_start_time >= CURRENT_DATE - interval '30 days'
计算一个日期范围内的每日唯一 uid 也相对简单。
SELECT
DATE_TRUNC('day',session_start_time) AS "date"
,COUNT(DISTINCT uid) AS "count"
FROM segment_clean.users_sessions
WHERE session_start_time >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY date(session_start_time)
然后我尝试了几种方法来在一个时间间隔内滚动 30 天唯一计数
SELECT
DATE(session_start_time) AS "running30day"
,COUNT(distinct(
case when date(session_start_time) >= running30day - interval '30 days'
AND date(session_start_time) <= running30day
then uid
end)
) AS "unique_30day"
FROM segment_clean.users_sessions
WHERE session_start_time >= CURRENT_DATE - interval '3 months'
GROUP BY date(session_start_time)
Order BY running30day desc
我真的认为这会奏效,但在查看结果时,似乎我得到的结果与我进行每日唯一而不是 30 天以上的唯一时相同。
我正在使用 SQL 查询编辑器从 Metabase 编写此查询。基础表处于红移状态。
如果你读到这里,谢谢,你的时间很有价值,我很感激你花了一些时间来阅读我的问题。
编辑: 按照正确的要求,我添加了一个我正在使用的数据集的示例以及期望的结果。
+-----+-------------------------------+
| UID | SESSION_START_TIME |
+-----+-------------------------------+
| | |
| 10 | 2020-01-13T01:46:07.000-05:00 |
| | |
| 5 | 2020-01-13T01:46:07.000-05:00 |
| | |
| 3 | 2020-01-18T02:49:23.000-05:00 |
| | |
| 9 | 2020-03-06T18:18:28.000-05:00 |
| | |
| 2 | 2020-03-06T18:18:28.000-05:00 |
| | |
| 8 | 2020-03-31T23:13:33.000-04:00 |
| | |
| 3 | 2020-08-28T18:23:15.000-04:00 |
| | |
| 2 | 2020-08-28T18:23:15.000-04:00 |
| | |
| 9 | 2020-08-28T18:23:15.000-04:00 |
| | |
| 3 | 2020-08-28T18:23:15.000-04:00 |
| | |
| 8 | 2020-09-15T16:40:29.000-04:00 |
| | |
| 3 | 2020-09-21T20:49:09.000-04:00 |
| | |
| 1 | 2020-11-05T21:31:48.000-05:00 |
| | |
| 6 | 2020-11-05T21:31:48.000-05:00 |
| | |
| 8 | 2020-12-12T04:42:00.000-05:00 |
| | |
| 8 | 2020-12-12T04:42:00.000-05:00 |
| | |
| 5 | 2020-12-12T04:42:00.000-05:00 |
+-----+-------------------------------+
下面是我想要的结果:
+------------+---------------------+
| DATE | UNIQUE 30 DAY COUNT |
+------------+---------------------+
| | |
| 2020-01-13 | 3 |
| | |
| 2020-01-18 | 1 |
| | |
| 2020-03-06 | 3 |
| | |
| 2020-03-31 | 1 |
| | |
| 2020-08-28 | 4 |
| | |
| 2020-09-15 | 2 |
| | |
| 2020-09-21 | 1 |
| | |
| 2020-11-05 | 2 |
| | |
| 2020-12-12 | 2 |
+------------+---------------------+
谢谢
【问题讨论】:
-
您能否添加数据/表格的外观以帮助重现问题?
-
你仍在使用 CURRENT_DATE 在你的 where : WHERE session_start_time >= CURRENT_DATE - interval '3 months' 我们可以把你传递给 running30day 和 interval 的值吗
-
请举一个数据示例:输入和预期结果。
-
谢谢,我返回并添加了我正在使用的数据集的示例以及我正在寻找的结果示例,
标签: sql amazon-redshift metabase