【发布时间】:2015-04-27 17:25:30
【问题描述】:
我有一张活动表,每个活动都有负责人。每天可能有多个此类事件,但我需要在给定日期为每个用户的 first 查询记录。
例如,如果我有以下事件表:
+----------+-------------+---------------------+
| event_id | director_id | event_start |
+----------+-------------+---------------------+
| 1 | 111 | 2015-04-27 10:00:00 |
+----------+-------------+---------------------+
| 2 | 222 | 2015-04-27 11:00:00 |
+----------+-------------+---------------------+
| 3 | 333 | 2015-04-27 12:00:00 |
+----------+-------------+---------------------+
| 4 | 111 | 2015-04-27 13:00:00 |
+----------+-------------+---------------------+
| 5 | 222 | 2015-04-27 09:00:00 |
+----------+-------------+---------------------+
我希望返回以下内容:
+----------+-------------+---------------------+
| event_id | director_id | event_start |
+----------+-------------+---------------------+
| 1 | 111 | 2015-04-27 10:00:00 |
+----------+-------------+---------------------+
| 5 | 222 | 2015-04-27 09:00:00 |
+----------+-------------+---------------------+
| 3 | 333 | 2015-04-27 12:00:00 |
+----------+-------------+---------------------+
我认为像下面这样的查询会起作用,但事实证明 MySQL 不支持 WHERE 子句中的 MIN (simple SQL query giving Invalid use of group function):
SELECT
event_id, director_id, MIN(event_start) AS event_start
FROM events
WHERE MIN(event_start) >= '2015-04-27 00:00:00'
AND MIN(event_start) < '2015-04-28 00:00:00'
GROUP BY director_id;
我怎样才能以最有效的方式做到这一点?我的events 表可能很容易有 10,000-100,000 条记录。
【问题讨论】:
-
你为什么不用
WHERE event_start = '2015-04-27 00:00:00'?因为value >= 1 AND value < 2的结果是value = 1!? -
@C4ud3x 事件可以在任何给定时间开始。第一次不一定会在午夜开始。
-
哦,对不起。有时间本身是肯定的哈哈。只是在寻找日期。
-
应该在 event_id 5、director_id 222 在您所需的输出中有一个
2015-04-27 09:00:00的 event_start 吗?
标签: mysql