我有下表:
-----------------------------------
PK integer date
-----------------------------------
1 2 03/01/01
2 1 04/01/01
3 3 02/01/01
4 3 05/01/01
5 2 01/01/01
6 1 06/01/01
我想要做的是按日期列进行排序,但是要使整数2的日期高于其他整数的顺序。我的输出就是这样。
-----------------------------------
PK integer date
-----------------------------------
1 2 01/01/01
5 2 03/01/01
3 3 02/01/01
2 1 04/01/01
4 3 05/01/01
6 1 06/01/01
目前,我完全不知道如何在MySQL中实现这一点,或者即使它可能。我还没有尝试任何东西,因为我不知道从哪里开始。
我应该说非2的整数顺序不是问题,所以下表同样好。
-----------------------------------
PK integer date
-----------------------------------
1 2 01/01/01
5 2 03/01/01
2 1 04/01/01
6 1 06/01/01
3 3 02/01/01
4 3 05/01/01
答案 0 :(得分:7)
您可以按计算的表达式排序查询,例如case
:
SELECT *
FROM `my_table`
ORDER BY CASE `integer` WHEN 2 THEN 1 ELSE 0 END DESC, `date` ASC
答案 1 :(得分:7)
最简单的方法是将integer
减去2,然后获取该数字的绝对值。然后对此进行排序。 2 - 2的绝对值将始终为零,任何其他计算将大于零。因此,您将强制integer
的2位于列表顶部(SQL Fiddle):
SELECT * FROM myTable
ORDER BY ABS(`integer` - 2), `date`
答案 2 :(得分:4)
使用UNION执行此操作比我初想的要复杂,但您可以指定优先级:
SELECT 1 as priority, id, mynumber, date from myTable
WHERE mynumber = 2
UNION
SELECT 2, id, mynumber, date from myTable
WHERE mynumber <> 2
ORDER BY priority ASC, date ASC
答案 3 :(得分:2)
如果我正确理解了问题,您希望按最小日期排列整数。
您需要计算此字段,将其加入,然后将其用于排序:
select t.*
from t join
(select `integer`, min(date) as mindate
from t
group by `integer`
) tm
on tm.`integer` = t.`integer`
order by tm.mindate, integer;
您可以在SQL Fiddle上看到结果。
答案 4 :(得分:2)
通过此
轻松完成编辑:
select * from Table1
order by case when `integer` != 2 then `date` end asc ,
case when `integer` = 2 then `date` end asc ;