我有以下查询:
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完成吗?
答案 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;