mysql - 按最接近指定日期的行排序,但将过去的记录放在结果集的末尾

标签 mysql sql sorting date

我无法想象这如何在 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/

相关文章:

PHP - 创建表失败

JavaScript 对列表进行限制排序

php - 开发 WordPress 管理链接重定向到实时站点

php - 如何在sphinxapi中通过sql_attr_uint过滤结果?

php - HY000 2006 MySQL 服务器已经消失

sql - MS Access 中的子查询问题

mysql - 将mysql查询结果保存到VB net中的变量

sql - Oracle - 沿间隔对值进行分组

javascript - AngularJs 对象排序

php - 并排合并两个数组,其中一个可以比另一个短