MYSQL的情况

时间:2014-10-28 11:58:52

标签: mysql

我有一个像这样的数据表

----------------------------------------------------------
|   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 orderval1 asc order val2asc 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行始终位于顶部。

1 个答案:

答案 0 :(得分:3)

你关闭了,比你想象的要容易: - )

Select * 
from mytable 
order by case when userID = 'abc' then 0 else 1 end, dateTime desc, val1, val2;