【发布时间】:2020-03-25 08:46:18
【问题描述】:
我有以下起始位置:
表格中包含有开始和结束日期的事件。
我想按以下维度对查询中的这些事件进行排序:
当前事件 > 未来事件 > 已完成事件
SELECT
startAt,
endAt,
(
CASE
WHEN DATE(endAt) > DATE(NOW()) AND DATE(startAt) < DATE(NOW()) THEN 1
WHEN DATE(endAt) > DATE(NOW()) AND DATE(startAt) > DATE(NOW()) THEN 0
ELSE -1
END
) as position
FROM
events
ORDER BY
position DESC
现在的问题:
按三个类别排序适用于上述查询,但在类别内必须应用以下排序:
当前事件(按结束日期排序)> 未来事件(按开始日期排序)> 已完成事件(按结束日期排序)
因此,首先所有即将到期的正在运行的事件将按降序排列(即比之前的事件有更多时间),然后所有即将开始的未来事件按降序排列(即比之前的事件开始晚),然后所有已完成的事件按降序排列。
在@Tim Biegeleisen 的帮助下解决
SELECT
startAt,
endAt
FROM
events
ORDER BY
(
CASE
WHEN endAt > CURDATE() AND startAt < CURDATE() THEN 1
WHEN endAt > CURDATE() AND startAt > CURDATE() THEN 0
ELSE -1
END
) DESC,
(
CASE
WHEN startAt < CURDATE() THEN endAt
ELSE startAt
END
) ASC
【问题讨论】:
标签: mysql sql sorting date sql-order-by