mysql - 记录排序依据; future 的 ASC,过去的 DESC

标签 mysql sql

我想按如下方式对记录进行排序:

  1. future /现在的事件 ASC
  2. 过去的事件 DESC

所以先是今天,然后是明天,直到没有更多的 future 记录。 然后我想显示过去的事件,但最新的优先。

到目前为止我已经找到了第一点的解决方案:

ORDER BY (
    CASE WHEN ev.StartDate < CURDATE()
          THEN 1
          ELSE 0
     END) ASC, ev.StartDate ASC

但是这个查询的问题是所有帖子都是按 ASC 顺序排列的,包括过去的帖子(需要是 DESC)。

如何在 CASE 中组合它?

最佳答案

您需要稍微复杂一点的order by:

ORDER BY (ev.StartDate < CURDATE()),
         (case when ev.StartDate > CURDATE() then ev.StartDate end) ASC,
         (case when ev.StartDate < CURDATE() then ev.StartDate end) DESC

你实际上可以用两个子句来做到这一点:

ORDER BY greatest(ev.StartDate, CURDATE()) DESC,
         least(ev.StartDate, CURDATE()) ASC

但我认为第一个版本的意图更清晰。

关于mysql - 记录排序依据; future 的 ASC,过去的 DESC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25892421/

相关文章:

Python MySQLDB Insert 以变量为参数

mysql - MySQL/MariaDB 中 PERCENTILE_CONT 的替代方案

Mysql查询: join and sort

php - 通过终端从 PHP 连接到 MYSQL

sql - 在 SQL 中构建基于月份的数据

非英文字符的 MySQL 正则表达式

php - MySQL Php语法错误,查看手册

mysql - 两个MySQL表的合并和别名

sql - 如何全范围均等地减少SQL查询的结果行数?

php - 从 2 个表获取数据并输入 php 中的第三个表的代码