表
-------------------------
id | user_id | date
------------------------
1 1 2017-09-12
2 1 2017-09-12
3 1 2017-09-13
4 2 2017-09-14
5 2 2017-09-15
---------------------------
我想返回用户计数的月度记录 .
SELECT DATE_FORMAT(date, '%Y-%m') AS date_period, COUNT(DISTINCT user_id) AS c
FROM stats GROUP by date_period
以上查询将2017-09的计数返回为2,但我希望每天只避免重复的user_id / date .
id | user_id | date
1 1 2017-09-12
2 1 2017-09-12
以上行应计为1,因为它是相同的用户和相同的日期
id | user_id | date
3 1 2017-09-13
上面的记录是user_id => 1但不同的一天所以应该计算 .
id | user_id | date
4 2 2017-09-14
5 2 2017-09-15
User_id => 2在不同日期有两行,因此应计为2
1 1 2 = 4
计数结果应为4 .
我坚持查询返回每月user_id(避免在同一天重复记录)
5 回答
获取每个user_id,日期组合的不同行并执行每月计数 .
其他答案的复杂性让我想知道我是否遗漏了一些东西,但这不应该只是你需要的吗?
这对我有用:
希望它能帮到你 .
标准的SQL方法将此作为两个计数级别:
我想查询性能可能会从汇总的总结中受益 . 你必须亲自尝试一下 .
在SQL Server 2012上,所有这三个答案对我都没有用 . 所以我得到了以下解决方案
将rank函数与子查询结合使用将允许根据给定列中的repitition过滤数据