【发布时间】:2023-03-06 15:22:01
【问题描述】:
我有一个访问表,结构如下:
+--------------------------------------+
| ID | Date | Time | Session |
+--------------------------------------+
| 1 | 05-18-2014 | 20:15:10 | 1 |
| 2 | 05-18-2014 | 20:15:20 | 1 |
| 3 | 05-18-2014 | 21:40:20 | 2 |
| 4 | 05-18-2014 | 21:45:30 | 1 |
| 5 | 05-18-2014 | 21:50:50 | 3 |
+--------------------------------------+
会话列是用户的会话 ID。我想查询该表以获取每小时的总访问者和唯一身份访问者,以获得如下结果:
+-----------------------+
| Time | Total | Unique |
+-----------------------+
| 20 | 2 | 1 |
| 21 | 3 | 2 |
+-----------------------+
唯一身份访问者是指在“访问”表中的任何位置具有以前从未出现过的会话的访问者。
以下仅选择每小时内的唯一访问者:
SELECT COUNT(*) Total, COUNT(DISTINCT Session) Unique, HOUR(Time) Time
WHERE Date = '05-18-2014'
FROM Visits
GROUP BY HOUR(Time)
以下似乎可行,但需要两个查询和一个子查询:
SELECT COUNT(*) Total, HOUR(Time) Time
FROM Visits
GROUP BY HOUR(Time);
SELECT COUNT(*) Unique, HOUR(Time) Time
FROM (
SELECT *
FROM Visits
GROUP BY Session
ORDER BY Date, Time DESC
) UniqueVisits
WHERE Date = '05-18-2014'
GROUP BY HOUR(Time);
有没有更简单的方法来得到这两个总数?
【问题讨论】:
-
您能否编辑您的问题以提供样本数据所需的结果?
-
啊,对不起。已添加。
-
我就是这样解释这个问题的。我的回答应该有效。