我需要得到如下的MySQL订单结果:
id | active | year | size
----------------------------
1 | 1 | 1Q 2014 | 650
2 | 1 | 3Q 2010 | 200
3 | 1 | 1Q 2010 | 1650
4 | 1 | 4Q 2012 | 0
5 | 0 | 1Q 2014 | 650
6 | 0 | 2Q 2012 | 1200
7 | 0 | 1Q 2014 | 0
最重要的是主动
下一个订单优先级是从最新到最旧的年份(1Q-4Q表示季度,因此4Q比1Q更新)-前提是大小>0,
如果size=0-年份不是优先级(记录id 4低于记录id 3)
这在MySQL或Laravel Eloguent中可能吗?
谢谢,问候,
保罗
正确答案:
SELECT * FROM my_table
ORDER BY active DESC,
(size > 0) DESC,
RIGHT(year, 4) DESC,
year DESC;
最佳答案
这在MySQL中有点麻烦,因为year
列有一个神秘的结构。最好以YYYY Q
格式存储。那就很容易分类了。但是,通过一些操作,你可以随心所欲:
order by active desc, -- actives first
(size > 0) desc, -- then size > 0
substring_index(year, ' ', 2) desc, -- then order by the year
year desc; -- then order by the quarter
关于mysql - MySQL-按3个条件排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34118167/