查询排序按照当天排在最前面,剩下的按照日期倒序排在后面

chilli6519 2020-11-12 09:02:41
查询数据表,按照日期 cdate 进行排序, 当天的排在最前面,然后后面的按照日期倒序
比如 :

1 2020-11-12
2 2020-11-12
3 2020-12-10;
4 2020-11-28
5 2020-11-05
6 2020-10-10

当天排在最前面可以按照
select * from table ORDER BY CASE cdate WHEN current_date() THEN 0 ELSE 1 END

但这个只能是将当天的排在前面,后面的日期是随机的,希望后面的日期能按序排列

谢谢
...全文
607 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
老紫竹 2020-12-31
  • 打赏
  • 举报
回复
引用 3 楼 AHUA1001 的回复:
没那么麻烦,直接执行这个语句就可以了。 SELECT T.* FROM ( SELECT '2020-11-12' D FROM DUAL UNION ALL SELECT '2020-11-12' D FROM DUAL UNION ALL SELECT '2020-12-10' D FROM DUAL UNION ALL SELECT '2020-11-28' D FROM DUAL UNION ALL SELECT '2020-11-05' D FROM DUAL UNION ALL SELECT '2020-10-10' D FROM DUAL) T ORDER BY IF(D=DATE_FORMAT(CURRENT_DATE(), '%Y-%m-%d'),0,1) , D DESC ;
正解。 根据计算列先正向排序,当天的为0, 其它的为1, 然后再按照日期反向。
weixin_41611100 2020-12-30
  • 打赏
  • 举报
回复
select * from
(
SELECT t.* from test t where t.create_time > CURDATE() ORDER BY t.create_time DESC
)a
union all
SELECT * from (
SELECT t.* from test t where t.create_time < CURDATE() ORDER BY t.create_time asc
)b



xmniemaosheng 2020-12-19
  • 打赏
  • 举报
回复
select * from table ORDER BY CASE cdate WHEN current_date() THEN 0 ELSE 1 END,cdate desc
chengangcsdn 2020-11-12
  • 打赏
  • 举报
回复
楼主要倒序,你只需要 楼上的日期减 改为日期 加即可。
天行归来 2020-11-12
  • 打赏
  • 举报
回复
可以把当天日期减去足够大一个值,让日期最小,然后再order by

select *,case datediff(cdate,current_date()) 
  when 0 then date_add(cdate, INTERVAL -99999 DAY) 
  else cdate end as sort_date 
from table  ORDER BY sort_date 
AHUA1001 2020-11-12
  • 打赏
  • 举报
回复
没那么麻烦,直接执行这个语句就可以了。
SELECT T.* FROM (
SELECT '2020-11-12' D FROM DUAL UNION ALL
SELECT '2020-11-12' D FROM DUAL UNION ALL
SELECT '2020-12-10' D FROM DUAL UNION ALL
SELECT '2020-11-28' D FROM DUAL UNION ALL
SELECT '2020-11-05' D FROM DUAL UNION ALL
SELECT '2020-10-10' D FROM DUAL) T
ORDER BY IF(D=DATE_FORMAT(CURRENT_DATE(), '%Y-%m-%d'),0,1) , D DESC ;

56,912

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧