【问题标题】:SQL query for active users活跃用户的 SQL 查询
【发布时间】:2010-05-18 21:23:29
【问题描述】:

此 SQL 查询为我提供了过去 30 天内今天的活跃用户数:

SELECT COUNT(*) 
FROM table.users
WHERE creation_tsz >= (now() - interval '30 days')

我怎样才能修改它以获得不是一个单一的值,而是一个日期范围内的活跃用户表?

我想要的输出如下所示:

日期 过去 30 天内活跃的用户 2010 年 1 月 1 日 10000 2010 年 1 月 2 日 11234 2010 年 1 月 3 日 12343 2010 年 1 月 4 日 15944 ……

谢谢,

罗伯

【问题讨论】:

  • 当您说“活跃”用户时,请明确您的意思。您是在使用 creation_tsz 还是有另一列可用于“活动”?
  • 我正在使用creation_tsz,但我想获得这个值不仅适用于今天(我使用上述查询),而且适用于我设置的一系列日期。

标签: sql


【解决方案1】:

将COUNT(*) 替换为*。

【讨论】:

  • 以上用尽了我允许的内存大小。
  • @Roberto:您可以通过两种方式减小输出的大小。通过将count(*) 替换为name, lastname, email, ... 来限制列数。或者减少时间窗口,即interval '5 days'
  • 间隔必须是 30 天,我想做的是有一个包含两列的表格输出:一个日期(来自我指定的范围)和在 30 天内活跃的用户数导致那个日期——也许我不清楚。
  • @Roberto:对于日期范围,请尝试where creation_tsz between ('2010-01-01' - interval '30 days') and '2010-01-01'。也许您可以发布一个您希望看到的输出示例。
【解决方案2】:

我不知道您使用的是什么数据库,因此很难具体说明。如果您的日期中没有时间,您可以这样做:

SELECT creation_tsz as Date, COUNT(*) as Count
FROM table.users
WHERE creation_tsz >= (now() - interval '30 days')
GROUP BY creation_tsz

否则,这会让你非常接近你想要的(不包括年份,因为你只做 30 天的范围):

SELECT month(creation_tsz) as Month, day(creation_tsz) as Day, COUNT(*) as Count
FROM table.users
WHERE creation_tsz >= (now() - interval '30 days')
GROUP BY month(creation_tsz), day(creation_tsz)

【讨论】:

  • 如何指定我想要结果的日期范围的开始和结束日期?谢谢
  • 尝试将 where 子句更改为:where creation_tsz between '2010-01-01' and '2010-01-30'
【解决方案3】:

如果表中的每个数据行都代表一个不同的用户,您可以使用下面的查询。

SELECT COUNT(1), date
FROM table
WHERE date >= (now() - interval '30 days')
GROUP BY 2 ORDER BY 2 DESC;

如果您的表包含所有会话,但每个用户都有不同的 id,那么您可以使用下面的查询。

SELECT COUNT(DISTINCT distinct_id), date
FROM table
WHERE date >= (now() - interval '30 days')
GROUP BY 2 ORDER BY 2 DESC;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多