如果列值为1,则按日期升序排序结果,否则按日期排序

时间:2020-02-13 21:33:37

标签: mysql sql-order-by case case-when

我在mysql中有以下结果;它只有两列:datexdate是时间戳记,x01

date       |  x
:--------- | -:
2020-02-13 |  1
2020-02-13 |  0
2020-02-01 |  1
2020-02-11 |  0
2020-02-11 |  1
2020-02-11 |  0
2020-02-12 |  1
2020-02-13 |  0

我希望这些结果排序如下... 如果列x等于1,则将这些结果放在表的顶部,并按从最旧到最新的日期排序。 如果x列等于0,则将这些结果放在表格底部,并按从最新到最早的日期排序。

我接近以下代码:

ORDER BY CASE WHEN x = '1' THEN 0 ELSE date END ASC

x列已正确排序,但日期与上面指定的不一致。

还可以使用mysql。

2 个答案:

答案 0 :(得分:1)

尝试一下 它首先按X排序,然后按日期x = 1升序排序,并且X = 0降序

SELECT 
`date`, `x`
FROM table1
order by
    x DESC,case when x = 1 then date end,
    date desc

http://sqlfiddle.com/#!9/d32c7d/4/0

答案 1 :(得分:1)

考虑:

order by
    x desc,
    case when x = 1 then date end,
    date desc

Demo on DB Fiddle

date       |  x
:--------- | -:
2020-02-01 |  1
2020-02-11 |  1
2020-02-12 |  1
2020-02-13 |  1
2020-02-13 |  0
2020-02-13 |  0
2020-02-11 |  0
2020-02-11 |  0
相关问题