为每行选择唯一列

时间:2014-07-28 20:36:29

标签: mysql distinct

我有下表:

'A', '2014-07-28'
'A', '2014-07-27'
'A', '2014-07-20'
'B', '2014-07-21'
'B', '2014-07-20'
'A', '2014-07-22'
'A', '2014-07-22'
'B', '2014-07-22'
'B', '2014-07-24'
'B', '2014-07-27'

我需要获取用户登录历史记录的报告。该报告应显示登录独特日期的用户数。

例如,在27日,A和B都登录。因此报告应该显示2。 在22日,A登录两次,而B登录一次,因此报告应显示2。

如果我通过user_id选择DISTINCT,那么不同日期的同一用户将不会被计算在内。 如果我按日期选择DISTINCT,那么不同用户的同一天就不会被计算在内。

我希望报告计算每个日期的唯一ID数。然后总结所有的日子。

最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

您将不得不使用Group By条款来获取每天的点数

Select user_id, `date`, count(*) As count
From loginTable
Group By user_id, `date`

然后在派生表中使用另一个group by对每个用户求和。

Select d.user_id, Sum(*) As TotalCount
From (
    Select user_id, `date`, count(*) As count
    From loginTable
    Group By user_id, `date`) d
Group By d.user_id