gpt4 book ai didi

MySQL 先按 "id"再按 "date"排序

转载 作者:行者123 更新时间:2023-11-28 23:18:21 28 4
gpt4 key购买 nike

我正在尝试先按事件事件排序我的 table ,然后是“结束日期”。这意味着,新创建的事件将始终位于最前面,后面是日期。当事件结束时,我希望最新的“endDate”在最前面。

下面是我的查询:

SELECT   campaignId, 
status,
dateCreated,
startDate,
endDate
FROM campaign
WHERE deleted='False'
ORDER BY DATE(endDate) > DATE(CURDATE()) DESC, campaignId DESC

看下面的截图,有些不是按“endDate”排序的(红框高亮显示) enter image description here

第一部分是正确的,这意味着“endDate”还没有结束,并且按 id 在先排序。但是,最后一部分是错误的,结束的事件应该按“结束日期”排序。我哪里做错了?

更新 SQL Fiddle(使用时请忽略 WHERE deleted='False'):http://sqlfiddle.com/#!9/0a7afb

最佳答案

ORDER BY DATE(endDate) > DATE(CURDATE()) DESC 表示 future 的事件排在第一位。它没有说明顺序。将表达式添加到 select 子句中,您将看到。

您可以执行 ORDER BY DATE(endDate) > DATE(CURDATE()) DESC, endDate DESC, campaignId DESC,但是 DATE(endDate) > DATE(CURDATE()) 表达式使排序变得非常慢并阻止使用索引。此外,您不必在日期列上执行 DATE()

如果您想要单独列出 future 的事件和过去的事件,您最好进行两次查询,将 endDate 条件放入 where 子句中。但是,对于小型数据集,这并不重要。

关于MySQL 先按 "id"再按 "date"排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42854511/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com