Mysql 按最接近指定日期的行排序,但将过去的记录放在结果集的末尾
我无法想象如何在SQL代码中实现这一点,但我觉得这是可能的 我有以下记录: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
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。这不符合问题的具体要求。过去日期的顺序与问题的要求不符。是的,这更有效,我对此投了赞成票:)