我想在mysql中创建一个存储过程,但是首先,我想获得正确的查询。然而,我不断遇到这样的问题:我似乎无法从我的查询中获得与我得到的日期时间戳对应的正确id。
这是我试图从中得到结果的表格:
id EventId start end
1 1 2019-04-05 00:00:00 2019-04-07 00:00:00
2 2 2020-04-03 00:00:00 2020-04-03 00:00:00
3 3 2020-04-02 00:00:00 2020-04-02 00:00:00
7 1 2020-06-11 00:00:00 2020-06-11 00:00:00
9 2 2020-06-18 00:00:00 2020-06-18 00:00:00
10 3 2020-06-11 00:00:00 2020-06-11 00:00:00
11 3 2020-06-07 00:00:00 2020-06-07 00:00:00
查询:
SELECT DISTINCT Eventid, MIN(start), id
from date_planning
WHERE `start` >= NOW()
GROUP BY Eventid
这给了我以下结果
EventId Min(start) id
1 2020-06-11 00:00:00 3
2 2020-06-18 00:00:00 9
3 2020-06-07 00:00:00 10
但这些是属于这些日期时间的正确ID:
EventId Min(start) id
1 2020-06-11 00:00:00 7
2 2020-06-18 00:00:00 9
3 2020-06-07 00:00:00 11
1条答案
按热度按时间ryhaxcpt1#
您希望每一行都有最小的“未来”日期
eventId
. 要解决这个最大的每组n个问题,您需要过滤而不是聚合。下面是一个使用相关子查询的选项:为了提高性能,您需要在
(eventId, start)
.