用于计算每周和每周访问一次的用户的SQL查询

时间:2015-03-24 12:46:45

标签: sql postgresql amazon-redshift

我有一个包含user_id和登录时间的使用表。我想获得每天至少登录一次的用户数量。我还需要获得每周至少登录一次的用户数量。

任何想法如何使用redshift查询进行处理?

这是架构:

user_id:BigInt
event_time:日期时间

示例结果:

否。每天至少登录一次的用户数:20 至少每周登录一次的用户数量:5

2 个答案:

答案 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