我有一个包含user_id和登录时间的使用表。我想获得每天至少登录一次的用户数量。我还需要获得每周至少登录一次的用户数量。
任何想法如何使用redshift查询进行处理?
这是架构:
user_id:BigInt
event_time:日期时间
示例结果:
否。每天至少登录一次的用户数:20 至少每周登录一次的用户数量:5
答案 0 :(得分:0)
试试这个:
/* Days range from date1 to date2 */
WITH day_range AS (
SELECT current_date + i AS day
FROM generate_series(DATE [$from_date] - current_date, DATE [$to_date] - current_date) i
)
/* Users logged at least once a day */
SELECT DISTINCT user_id
FROM user_event
WHERE NOT EXISTS
(SELECT user_id
FROM day_range LEFT JOIN user_event ON day_range.day = user_event.event_time::date
WHERE user_id IS NULL)
对于每周至少登录一次的用户来说,它应该更复杂但类似。
答案 1 :(得分:0)
这是一个伪SQL,应该给你你想要的东西。
SELECT Sum(CASE
WHEN daycount = datediff('day', '{start_date}', '{end_date}')
THEN 1
ELSE 0
END) AS visited_every_day
,Sum(CASE
WHEN weekcount = datediff('week', '{start_date}', '{end_date}')
THEN 1
ELSE 0
END) AS visited_every_week
FROM (
SELECT user_id
,Count(DISTINCT to_char(event_time, 'YYYYMMDD')) AS daycount
,Count(DISTINCT to_char(event_time, 'WW')) AS weekcount
FROM user_event ue
WHERE Event_time BETWEEN '{start_date}'
AND '{end_date}'
GROUP BY user_id
) stage