【问题标题】:MySQL query with grouping by Time按时间分组的 MySQL 查询
【发布时间】:2013-01-24 12:18:49
【问题描述】:

我有一个带有字段 uid (INT) 和 TIME (TIMESTAMP) 的 MySQL 表,其中注册了站点上的用户登录。

接收在 2 天或更长时间内进入网站的用户数量的最聪明的方法是什么? 是否存在比我使用的下面的 sn-p 更好的东西?

SELECT count(*) FROM
   (SELECT uid, count(*) as DistinctDayCount FROM 
       (SELECT uid, Time FROM Log GROUP BY uid, DATE(Time)) AS DistinctDays 
   GROUP BY uid) AS DaysCount
WHERE DistinctDayCount > 1

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    你可以用少一个子查询来做到这一点:

    select count(*)
    from (select uid, count(distinct date(time)) as DistinctDayCount
          from log
          group by uid
         ) t
    WHERE DistinctDayCount > 1
    

    不过,老实说,我会查看每个计数的数字,使用如下查询:

    select DistinctDayCount, count(*), min(uid), max(uid)
    from (select uid, count(distinct date(time)) as DistinctDayCount
          from log
          group by uid
         ) t
    group by DistinctDayCount
    order by 1
    

    minmax 提供了示例用户 ID,您可以进一步调查。通常在“有多少用户登录超过 1 天”之后的下一个问题是“他们登录天数的分布情况”。

    【讨论】:

    • 非常感谢您如此详细的回复! :)
    【解决方案2】:
    select count(*) from
    (
    SELECT uid, min(Time), Max(Time) 
    FROM Log 
    GROUP BY uid 
    HAVING DATEDIFF(max(Time),min(Time))>1
    ) t
    

    【讨论】:

    • 不幸的是它不一样。
    猜你喜欢
    • 2011-07-24
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 2018-06-18
    • 1970-01-01
    • 2020-06-05
    相关资源
    最近更新 更多