我有一个带有日期列的事件的简单表。我可以轻松选择 下一个 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 *
虽然我可以轻松检查第一个查询的结果,以了解具体方法 返回了许多行并构建另一个查询以查找过去的日期 如果有必要,我很想知道是否有办法获取这些 单个查询中的行。
答案 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;