我无法想象这如何在 SQL 代码中完成,但我觉得这是可能的。
我有以下记录:
ID | NAME | REGDATE
1 sam 2017-08-12
2 gab 2017-08-13
3 mab 2017-08-19
4 mab 2017-08-20
5 don 2017-08-18
6 kob 2017-08-14
7 mol 2017-08-15
现在我想像这样对上面的行进行排序:
ID | NAME | REGDATE
5 don 2017-08-18
3 mab 2017-08-19
4 mab 2017-08-20
7 mol 2017-08-15
6 kob 2017-08-14
2 gab 2017-08-13
1 sam 2017-08-12
我想要的是将行排序到今天最近的日期(即 2017-08-18),并将过去具有 regdate
的行放在结果集的末尾你可以在上面看到。
这在 SQL 中怎么可能?
我找不到合适的术语,如何在搜索引擎中搜索答案。我所知道的就是使用 order by
就是这样。
最佳答案
您可以通过为 order by
使用多个键来做到这一点:
order by ( regdate >= curdate() ) desc, -- put current and future first
(case when regdate >= curdate() then regdate end) asc,
regdate desc
严格来说,第一个条件不是必须的。但是,我认为它使逻辑更清晰。
关于mysql - 按最接近指定日期的行排序,但将过去的记录放在结果集的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45737780/