【Mysql之自我练习<三>】select查询复杂排序(注:私用的,为了不遗失)


表task_order (id,status,start_time,time_end,verify_time,report_area_time,update_time,create_time)状态(1、未开始;2、开始;3、进行中;4、已完成;5、已评价;6、已核准;7、已结束;-1、已取消;-2、已拒绝)
项目排序要求:1、当任务状态为2,且任务计划开始时间小于等于当前时间
          2、当任务状态为3,且任务计划结束时时间小于等于当前时间
          3、当任务状态为1时,按任务计划开始时间升序
          4、当任务状态为2时,按任务计划开始时间升序
	  5、当任务状态为3时、按任务上报进度时间降序
	  6、当任务状态为4时,按任务结束时间降序
	  7、当任务状态为5时,按任务结束时间降序
          8、当任务状态为6时,按任务结束时间降序
	  9、当任务状态为7时,按任务结束时间降序
	  10、当任务状态为-1时,按任务记录更新时间降序
	  11、当任务状态为-2时,按创建任务时间降序

      
SELECT o.*,(
case
when (o.status=2 and o.start_time <= UNIX_TIMESTAMP(CURRENT_DATE())) THEN '-1'
when (o.status=2 and o.start_time > UNIX_TIMESTAMP(CURRENT_DATE())) THEN '2' 
when (o.status=3 and o.end_time <= UNIX_TIMESTAMP(CURRENT_DATE())) THEN '-2'
when (o.status=3 and o.end_time > UNIX_TIMESTAMP(CURRENT_DATE())) THEN '3'
when o.status=1 THEN '1'
when o.status=4 THEN '4'
when o.status=5 THEN '5'
when o.status=6 THEN '6'
when o.status=7 THEN '7'
when o.status=-1 THEN '8'
when o.status=-2 THEN '9'
END) as new_status
from task_order o  where f.pepole_id =75 ORDER BY new_status ASC,
case when o.status=1 THEN  o.start_time END asc,	
case when o.status=2 THEN  o.start_time END asc,
case when o.status=3 THEN  o.report_area_time END desc,
case when o.status=4 THEN  o.time_end END desc,
case when o.status=5 THEN  o.time_end END desc,
case when o.status=6 THEN  o.time_end END desc, 
case when o.status=7 THEN  o.verify_time END desc,
case when o.status=-1 THEN  o.update_time END desc,
case when o.status=-2 THEN  o.create_time END desc;

猜你喜欢

转载自blog.csdn.net/zouxiongqqq/article/details/79003987