最近项目中有个需求,就是要把当前的用户预约信息进行排序,当天排在最前面,当天之后按appoint_day正序,当天之前按appoint_day倒序
SELECT * FROM my_table ORDER BY CASE WHEN appoint_day = CURDATE() THEN 0 WHEN appoint_day > CURDATE() THEN 1 ELSE 2 END, CASE WHEN appoint_day = CURDATE() THEN appoint_time ELSE appoint_day END, CASE WHEN appoint_day < CURDATE() THEN appoint_day END DESC;
首先,使用CASE语句将“当天”的记录视为最前面的记录,根据“当天之后正序”的要求,将其余记录正序排列,根据“当天之前倒序”的要求,将所有其他记录逆序放置在最后。
然后,我们使用第二个CASE语句,当appoint_day与当前日期相同时,将按appoint_time进行排序,以确保是按照约定时间进行排序。否则,我们将其按appoint_day的值排序,并随后执行第三个CASE语句,以确保已经在当前日期之前的所有记录按照日期倒序排列。
Tags:case when end