【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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章