gpt4 book ai didi

mysql - 如果 future 不可用,请选择 future 或过去的日期

转载 作者:行者123 更新时间:2023-11-29 06:45:09 25 4
gpt4 key购买 nike

我有一个带有日期列的简单事件表。我可以轻松选择接下来的n个事件(假设n = 3):

SELECT * FROM events WHERE `date` > NOW() ORDER BY `date` LIMIT 3

但是, future 肯定会有 3 场事件。在这种情况下,我想退回 future 可用的并完成现有的与今天最亲近的人失踪了。例如,如果今天是 12-04 天,应从整个列表中选择以下标有 * 的日期:

10-03
20-03
30-03 *
10-04 *
20-04 *

虽然我可以轻松检查第一个查询的结果以了解如何返回了许多行并构建另一个查询来查找过去的日期如果有必要,我很想知道是否有办法获取这些单个查询中的行。

最佳答案

您可以在 order by 中使用多个键。所以:

SELECT e.*
FROM events
ORDER BY (date > now()) DESC, -- future events first
(CASE WHEN date > now() THEN date END) ASC -- nearest future events first
date DESC -- other dates in descending order
LIMIT 3;

如果您的表很大,那么从不久的将来和不久的过去获取三个事件并将它们组合起来可能会更快:

select e.*
from ((select e.*
from events e
where date > now()
order by date asc
limit 3
) union all
(select e.*
from events e
where date <= now()
order by date desc
limit 3
)
) e
order by date desc
limit 3;

关于mysql - 如果 future 不可用,请选择 future 或过去的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49807058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com