使用GROUP时,如何忽略另一列中的重复值?

时间:2017-03-01 16:33:39

标签: mysql count group-by

我有以下查询:

SELECT 
    DATE(`timeStamp`),COUNT(*)  
FROM 
    `wf`.sh`
WHERE 
    (DATE(`timeStamp`) >= curdate()- INTERVAL 31 DAY)   
GROUP BY 
    DATE(`timeStamp`) 
HAVING 
    COUNT(DATE(`timeStamp`)) > 0  
ORDER BY 
    DATE(`timeStamp`) ASC;

此查询的目的是在一个月内检索系统中每天在线的用户数量。

示例数据集:

uID     timeStamp
1       2016-11-28 00:27:01
1       2016-11-28 01:10:15
1234    2016-11-28 02:50:00
2       2016-11-28 06:11:09
47      2016-11-28 08:32:48
1246    2016-11-28 09:51:47

以其当前格式,此查询返回具有重复日期的行数,例如:

timeStamp   COUNT(*)
2017-01-29  256
2017-01-30  224
2017-01-31  240
2017-02-01  95
2017-02-02  136

我有另一个字段uID;我需要修改我的查询,以便GROUP也忽略每天都有重复uID字段的行。我尝试创建另一个GROUP BY,但是给出了错误的'不正确的GROUP BY子句'(或者那种性质的东西)。

这可以通过纯MySQL完成吗?

1 个答案:

答案 0 :(得分:1)

您可以使用子选择

SELECT 
    visitDate,COUNT(*)  
FROM 
    (SELECT DISTINCT DATE(`timeStamp`) as visitDate, uID FROM `wf`.sh`) alias_t
WHERE 
    (visitDate >= curdate()- INTERVAL 31 DAY)   
GROUP BY 
    visitDate
HAVING 
    COUNT(visitDate) > 0  
ORDER BY 
    visitDate ASC;