3

我有一个存储事件的表,它有 2 个日期字段。一个用于事件的开始日期 (start_date),另一个用于结束日期 (end_date)。有些事件没有定义 end_date 或 end_date='1970-01-01'。

我使用以下 mysql 查询来检索当前和未来的事件。

SELECT * 
FROM events 
WHERE start_time >= CURDATE() 
    OR (start_time <= CURDATE() AND end_time>=CURDATE()) 
ORDER BY events.start_time;

我需要的是一个返回相同结果但以不同方式排序并根据以下方式排序的查询:

  • 事件被“划分”为两组:当前事件和未来事件。当前事件被认为是在实际日期(“昨天”)前一天开始但仍未完成的所有事件。

  • 结果将显示第一个未来事件,按 start_time 升序排列,显示当前事件后,按 start_time 升序排列。

谢谢

4

2 回答 2

2
SELECT *,
       DATEDIFF(start_time, CURDATE()) AS diff
FROM   events
WHERE  start_time >= CURDATE()
        OR ( start_time <= CURDATE()
             AND end_time >= CURDATE() )
ORDER  BY CASE
            WHEN diff > 0 THEN 0
            ELSE 1
          end,
          diff ASC;
于 2012-08-30T03:05:48.727 回答
0

试试这个:

ORDER BY 
  (CASE WHEN start_time < CURDATE() AND end_time >= CURDATE() THEN 1 ELSE 0 END) ASC,
  start_time ASC
于 2012-08-30T03:04:29.263 回答