如果未来不可用,请选择未来或过去的日期

时间:2018-04-12 23:03:49

标签: mysql sql database date

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

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

然而,未来不会有3场比赛。在这种情况下, 我想回到将来可用的那些并完成它是什么 与今天最接近的人失踪了。例如,如果今天是12-04日,那么 应在整个列表中选择以*标记的以下日期:

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

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

1 个答案:

答案 0 :(得分:2)

您可以在.having(g.code.count().gt(2L))中使用多个键。所以:

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;