场景:把还没到的会议排前面,并且越靠近当前时间的会议排前面;然后把已开完的会议按开会时间降序排序
表名:meeting(会议)
字段:meeting_time(开会时间)
......其他字段
实现sql:
select * from meeting order by
CASE WHEN meeting_time > NOW() THEN 1 else 2 END asc,
abs(EXTRACT(EPOCH FROM meeting_time - now())) asc
说明:
-- 先用会议时间跟当前时间比较,大于当前时间的会议排前面
CASE WHEN meeting_time > NOW() THEN 1 else 2 END asc
-- 再用abs绝对值函数,取会议时间 减去 当前时间 的绝对值 ,做升序排序,越靠近当前时间的排前面
abs(EXTRACT(EPOCH FROM meeting_time - now())) asc