如何通过查询结果获得正确的id

qcuzuvrc  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(218)

我想在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
ryhaxcpt

ryhaxcpt1#

您希望每一行都有最小的“未来”日期 eventId . 要解决这个最大的每组n个问题,您需要过滤而不是聚合。下面是一个使用相关子查询的选项:

select dt.*
from date_planning dt
where dt.start = (
    select min(dt1.start)
    from date_planning dt1
    where dt1.eventId = dt.eventId and dt1.start >= now()
)

为了提高性能,您需要在 (eventId, start) .

相关问题