【问题标题】:Count unique days grouped by user计算按用户分组的唯一天数
【发布时间】:2017-01-31 11:53:38
【问题描述】:

我有下面的SQL表

|user|log_date            |
| 2  |2016-06-23 10:55:52 |
| 2  |2016-06-23 10:55:54 |
| 2  |2016-06-24 10:53:54 |
| 2  |2016-06-24 10:54:54 |

与许多其他用户和 log_dates 等等。我想要的是检查整个月:

where left(log_date,7)="2016-06"

但我想每天只计算一次。所以这个例子中我的表的结果应该是:

|user|count of unique days|
| 2  |         2          |

我希望它按用户分组。因此,对于表中的每个用户,我都想计算独特的天数。

谁能给我一个提示?

【问题讨论】:

    标签: mysql sql group-by sum


    【解决方案1】:

    以这种方式编写条件允许使用索引...

    SELECT t.user
         , COUNT(DISTINCT DATE(t.log_date)) unique_days
      FROM my_table t
     WHERE t.log_date BETWEEN '2016-06-01 00:00:00' AND '2016-06-31 23:59:59' -- or t.log_date >= '2016-06-01 00:00:00' AND t.log_date < '2016-07-01 00:00:00' 
     GROUP 
        BY t.user;
    

    (不知道为什么Sagi在更正后删除了他们的答案)

    【讨论】:

      【解决方案2】:

      试试这个:

      select
          user,
          count(distinct day(log_date)) as `count of unique days`
      from yourtable
      where left(log_date, 7) = '2016-06'
      group by user
      

      SQLFiddle Demo

      【讨论】:

        猜你喜欢
        • 2018-08-04
        • 1970-01-01
        • 2020-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-11
        • 1970-01-01
        相关资源
        最近更新 更多