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-2025 CODEPRJ.COM