过去几个小时,我一直在撞墙,试图让这个单一的查询工作,但没有成功。使用DATE_FORMAT别名的MySQL子查询计数
我有一个名为viewer_log的表。
每一行都是一个带有session_id和时间戳记的浏览量。
我有麻烦格式化时间戳为一天,按当天分组,但是然后计算每天UNIQUE会话的数量。
到目前为止,该查询(也花了很长的时间去工作)是:
SELECT day, COUNT(*) as unique_sessions from (SELECT COUNT(viewer_session_id) AS sessions, DATE_FORMAT(timestamp, "%Y-%m-%d") AS day FROM viewer_log GROUP BY `viewer_session_id` HAVING day='2011-03-23') AS sessions;
你会发现这一天是硬编码,让
mysql> SELECT day, COUNT(*) as unique_sessions from (SELECT COUNT(viewer_session_id) AS sessions, DATE_FORMAT(timestamp, "%Y-%m-%d") AS day FROM viewer_log GROUP BY `viewer_session_id` HAVING day='2011-03-23') AS sessions;
+------------+-----------------+
| day | unique_sessions |
+------------+-----------------+
| 2011-03-23 | 21 |
+------------+-----------------+
我想扩大这些结果,而不必指定一天,这是我遇到问题的地方,无法在互联网上找到答案......我确信它在那里,不知道我在找什么。
EG:
+------------+-----------------+
| day | unique_sessions |
+------------+-----------------+
| 2011-03-21 | 14 |
| 2011-03-22 | 11 |
| 2011-03-23 | 21 |
+------------+-----------------+
我有很多的麻烦移动过去的这一点上,我试图与它自身的拷贝加入表,但通常碰到一个未知的列名或结果我认为应该被显示出来是错误的:
mysql> select DATE_FORMAT(v.timestamp, "%Y-%m-%d") AS date, count(sessions) as rows from (SELECT COUNT(viewer_session_id) AS sessions, DATE_FORMAT(timestamp, "%Y-%m-%d") AS date FROM viewer_log GROUP BY viewer_session_id) AS s JOIN viewer_log v ON (s.date=date) GROUP BY date;
+------------+--------+
| date | rows |
+------------+--------+
| 0000-00-00 | 2551 |
| 0000-00-00 | 20408 |
| 0000-00-00 | 20408 |
| 0000-00-00 | 5102 |
| 0000-00-00 | 2551 |
| 0000-00-00 | 2551 |
| 0000-00-00 | 63775 |
| 0000-00-00 | 211733 |
| 0000-00-00 | 53571 |
| 0000-00-00 | 53571 |
| 0000-00-00 | 53571 |
| 0000-00-00 | 51020 |
| 0000-00-00 | 48469 |
| 0000-00-00 | 91836 |
| 0000-00-00 | 86734 |
| 0000-00-00 | 33163 |
| 0000-00-00 | 45918 |
| 0000-00-00 | 28061 |
| 0000-00-00 | 86734 |
| 0000-00-00 | 76530 |
| 0000-00-00 | 53571 |
| 0000-00-00 | 33163 |
+------------+--------+
22 rows in set, 1 warning (0.63 sec)
谢谢!我最终做的是: – ilovett 2011-03-25 17:03:54