我有一个这样的数据表
----------------------------------------------------------
| 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
,但如果用户ID匹配我要上总是独立于其他领域的顶级该行。
为此,我有这样的查询
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
当我使用val1或val2对其进行排序时,这很好(因为顺序为asc),但是当我使用dateTime对其进行排序时,它最后显示了匹配的userID行(因为顺序为desc)。我希望匹配的用户ID行始终始终位于顶部。
您已经接近了,并且比您想象的要容易:-)
Select *
from mytable
order by case when userID = 'abc' then 0 else 1 end, dateTime desc, val1, val2;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句