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

Mysql 按最接近指定日期的行排序,但将过去的记录放在结果集的末尾,mysql,sql,sorting,date,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 | R

我无法想象如何在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
order by case when REGDATE > curdate() then 1 else 2 end, regdate
我想要的是将行排序到最接近的日期(即2017-08-18),并将过去具有
regdate
的行放在您可以看到的结果集的末尾

在SQL中如何实现这一点

我找不到合适的术语,我如何在搜索引擎中搜索答案。我所知道的就是使用orderby,就是这样。

类似这样的东西:

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
order by case when REGDATE > curdate() then 1 else 2 end, regdate

您可以通过使用多个键来执行以下操作:
orderby

order by ( regdate >= curdate() ) desc, -- put current and future first
         (case when regdate >= curdate() then regdate end) asc,
         regdate desc

严格地说,第一个条件是没有必要的。但是,我认为这会让逻辑更清晰。

我感觉查询将使用DateDiff。你可以将
按顺序
案例结合起来,当
像这个家伙这样做时,这不是你问题的直接解决方案,但是一个很好的起点。为什么投票不清楚我在问什么?我已经说了我想要的结果。谢谢你提供了一个非常简单的方法:)但是它使用
=
@Mahan。这不符合问题的具体要求。过去日期的顺序与问题的要求不符。是的,这更有效,我对此投了赞成票:)