【问题标题】:postgres sorting based on multiple date value's基于多个日期值的postgres排序
【发布时间】:2018-02-23 02:46:02
【问题描述】:

我有一个项目表,其中包含 start_at (date) end_at(date) pauzed_at (date) 等列的项目。 我想根据日期值订购项目。

排序应该是;

- STARTED projects
- PAUZED projects
- IDLE projects 
- ENDED projects

当日期在 start_atend_at 之间时,项目开始。

未达到 start_at 日期时项目处于空闲状态。

到了 end_at 日期时项目结束。

在设置 paused_at 等时暂停项目。

如何根据项目的状态对该表进行排序?

【问题讨论】:

    标签: sql postgresql select sql-order-by


    【解决方案1】:

    状态可以用case 表达式表示:

    SELECT *
    FROM   projects
    ORDER BY CASE WHEN paused_at IS NOT NULL THEN 2 -- paused
                  WHEN ended_at() < NOW() THEN 4 -- ended
                  WHEN started_at() > NOW() THEN 3 -- idle
                  ELSE 1 -- started
             END ASC
    

    【讨论】:

      【解决方案2】:

      falsetrue 之前的订单:

      order by
          now() >= start_at and now() < end_at desc,
          paused_at is null,
          now() < start_at desc,
          now() >= end_at desc
      

      case 表达式是规划器的优化障碍。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-20
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 2021-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多