Mybatis orderby復雜排序


業務開發上遇到分頁查詢的綜合排序:先按時間排序(未開始>進行中>已結束),如果未開始或進行中,則按開始時間正序拍,如果已結束則按開始時間倒序排。

 1      select a.id, a.has_sign_in hasSignIn, a.has_sign_out hasSignOut, if(a.integral = 1, b.integral, 0) integral
 2             ,b.kind kind, b.id activityId
 3             ,b.name activityName, b.type, b.begin_time beginTime, b.end_time endTime, t.name projectName
 4             ,if(b.begin_time >= now(), 2, if(b.end_time <= now(), 3, 1)) idx
 5         FROM b
 6         LEFT JOIN a
 7             ON a.activity_id = b.id and a.has_del = 'N' and a.user_id = #{userId}
 8         LEFT JOIN t
 9             ON b.training_project_id = t.id
10         WHERE b.has_del = 'N' and (t.has_del is null or t.has_del = 'N')
11             and (a.id is not null or b.kind is not null)
18         order by idx,
19             case when idx = 1 then b.begin_time when idx = 2 then b.begin_time end asc,
20             case when idx = 3 then b.begin_time end desc

這里用if函數先通過時間判斷得到idx,通過idx的大小對時間排序。

然后通過casewhen來做正序和倒序的判斷。

注意1orderby里面是沒有if的。

注意2:從caseend的整個塊,應被視為單個“單元”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM