我有一个我们开发的工具,当他们走进房间时,通过RFID扫描人们。
所以我有像这样的任务设置的人的扫描数据表
ID | User | Created_At
Int| Int | Datetime
10 | 223 | 2015-09-07 00:00:00
etc...
我想查询每个用户扫描一张传递的唯一日期数。
在一个完美的世界中,报告中只有3列
人员ID,他们扫描的不同天数以及他们扫描的总次数。
总扫描很简单,但我在不同的日程计数中难以接受。
答案 0 :(得分:0)
首先,您需要一个结果集,显示每个用户在数据库中出现的日期。
SELECT DISTINCT DATE(Created_At) Scandate, User
FROM Scan
然后你聚合它。
SELECT COUNT(*) Datecount, User
FROM (
SELECT DISTINCT DATE(Created_At) Scandate, User
FROM Scan
) A
GROUP BY User
这可以获得每个用户出现的日期数。
然后你需要弄清楚基本的数量。
SELECT COUNT(*) Scancount, User
FROM Scan
GROUP BY User
最后,您需要在User上将这两者结合在一起,并对它们进行排序以使它们有意义。
SELECT Q.User, R.Scancount, S.Datecount
FROM (
SELECT COUNT(*) Datecount, User
FROM (
SELECT DISTINCT DATE(Created_At) Scandate, User
FROM Scan
) A
GROUP BY User
) R
JOIN (
SELECT COUNT(*) Scancount, User
FROM Scan
GROUP BY User
) S ON R.User = S.User
ORDER BY Q.User