我有一个像这样的数据表
----------------------------------------------------------
| userID | dateTime | val1 | val2 |
----------------------------------------------------------
| abc | 2014-10-20 00:00:00 | 21.5 | 18.5 |
| ijk | 2014-10-21 00:00:00 | 22.5 | 17.5 |
| pqr | 2014-10-22 00:00:00 | 23.5 | 16.5 |
| xyz | 2014-10-23 00:00:00 | 24.5 | 14.5 |
----------------------------------------------------------
我希望dateTime
中的desc order
按val1
asc order
val2
和asc order
Select *
from mytable
order by case
when userID = 'abc' then 1
else 'ordeyByField' end 'order';
WHERE orderByField = dateTime or val1 or val2
For dateTime, order = desc
and
for val1 or val2, order = asc
排序,但是如果是用户ID匹配我希望顶部的行始终独立于其他字段。
为此,我有一个像这样的查询
{{1}}
当我用val1或val2对它进行排序时它很好(因为顺序是asc)但是当我用dateTime对它进行排序时,它会在最后显示匹配的userID行(因为顺序是desc)。我希望匹配的userID行始终位于顶部。
答案 0 :(得分:3)
你关闭了,比你想象的要容易: - )
Select *
from mytable
order by case when userID = 'abc' then 0 else 1 end, dateTime desc, val1, val2;