【问题标题】:order results by date asc if column value is 1, otherwise date desc如果列值为 1,则按日期升序排列结果,否则按日期降序排列
【发布时间】:2020-02-13 21:33:37
【问题描述】:

我在mysql中有以下结果;它只有两列:date 和 x。 date 是时间戳,x 是 0 或 1。

日期 | 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。

【问题讨论】:

  • 你的主键是什么?
  • 谢谢!两者都有效......现在我必须弄清楚为什么......

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


【解决方案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

【讨论】:

  • 当我看到这个答案被删除和编辑后,我有一种强烈的似曾相识的感觉......
【解决方案2】:

考虑:

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

Demo on DB Fiddle:

日期 | 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

【讨论】:

    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 2020-02-08
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多