用于计算每周和每周访问一次的用户的 SQL 查询
Posted
技术标签:
【中文标题】用于计算每周和每周访问一次的用户的 SQL 查询【英文标题】:SQL queries for calculating users who visited at once every week and every week 【发布时间】:2015-03-24 12:46:45 【问题描述】:我有一个包含 user_id 和登录时间的使用表。我想获取每天至少登录一次的用户数量。我还需要获取每周至少登录一次的用户数。
知道如何使用红移查询来解决它吗?
这是架构:
user_id:BigInt event_time: 日期时间
示例结果:
没有。每天至少登录一次的用户:20 每周至少登录一次的用户数:5
【问题讨论】:
请使用示例数据和所需结果编辑您的问题。 在问题中给出你的架构结构 user_id 是 BigInt,event_time 是 Datetime 字段。 到目前为止你尝试了什么?使用 generate_series() 创建从开始到结束的日期列表,并加入此列表。 其实我弄错了,这是红移。 redshift 不完全支持 generate_series。我不知道该怎么做,我在 user_id 和 DATE(event_time) 上尝试了一些分组,但没有得到任何积极的结果。 【参考方案1】:试试这个:
/* 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)
对于每周至少登录一次的用户,它应该更复杂但类似。
【讨论】:
【参考方案2】:这是一个伪 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
【讨论】:
以上是关于用于计算每周和每周访问一次的用户的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
使用 rake 任务时检查电子邮件是不是发送一次的最佳方法是啥?