【发布时间】:2018-09-13 15:11:04
【问题描述】:
需要有关根据日期和状态订购某些项目/事件的最有效方式的想法。
目前我有以下查询。
select tevent.ID, tevent.ename, e_dates.edate, tevent.status, tevent.eactive from tevent
LEFT JOIN e_dates on tevent.ID=e_dates.EID) Where tevent.status <> 'delete' and tevent.eactive ='Y' group by tevent.id order
by (case when tevent.status = 'closed' and e_dates.edate >= curdate() then 0
else 1 end), edates.edate desc
我使用了一个案例,但它排序了状态,然后是日期,这让人们感到困惑。
下面是输出
+----+--------------+-----+-----------+
| ID |Edate | Ename | Status |
+----+--------------+-----+-----------+
| 2 | 2018-09-21 | Event2 | Closed |
| 5 | 2018-09-15 | Event5 | Closed |
| 3 | 2018-12-12 | Event3 | Open |
| 6 | 2018-10-25 | Event6 | Approved|
| 4 | 2018-10-25 | Event4 | Open |
| 7 | 2018-10-15 | Event7 | Pending |
| 10 | 2018-10-01 | Event10 | Open |
| 1 | 2018-09-30 | Event1 | Open |
| 4 | 2018-09-30 | Event4 | Open |
| 8 | 2018-09-01 | Event8 | Closed |
| 11 | 2018-08-25 | Event11 | Closed |
+----+--------------+-----+-----------+
已编辑: 我想要完成的是列出已关闭的事件,其中事件日期在事件日期之前保持在顶部。 IE(ID 2 和 ID 5)
但要由 ASC 按时间顺序列出 OPEN、APPROVED、PENDING 的事件状态。
以及事件日期(edate)晚于底部列出的当前日期(now())的已结束事件
例如:
+----+--------------+-----+-----------+
| ID |Edate | Ename | Status |
+----+--------------+-----+-----------+
| 2 | 2018-09-21 | Event2 | Closed |
| 5 | 2018-09-15 | Event5 | Closed |
| 1 | 2018-09-30 | Event1 | Open |*
| 4 | 2018-09-30 | Event4 | Open |*
| 10 | 2018-10-01 | Event10 | Open |*
| 7 | 2018-10-15 | Event7 | Pending |*
| 4 | 2018-10-25 | Event4 | Open |*
| 6 | 2018-10-25 | Event6 | Approved|*
| 3 | 2018-12-12 | Event3 | Open |*
| 11 | 2018-08-25 | Event11 | Closed |
| 8 | 2018-09-01 | Event8 | Closed |
+----+--------------+-----+-----------+
【问题讨论】:
-
我很努力,但我无法理解您的问题。我无法弄清楚您所说的“未通过的已关闭事件”是什么意思,我的任何想法都与您显示的输出不匹配。我还想知道为什么您的 SQL 查询缺少某些部分,例如表达式和表。我已投票结束您的问题,因为不清楚您要问什么。
-
对不起,我没有说清楚,出于安全原因不想在查询中包含字段名称。让我看看我是否可以编辑它以及更多的查询。
-
是的,这好多了,但是请再次阅读您所写的内容:“......其中活动日期在活动日期之前......”。以我的经验,“事件日期”与“事件日期”相同,我只能在您的两个表中找到一个日期字段,即:
edates.edate。您需要两个日期列来比较某些内容。在您的查询中,您使用当前日期,但您必须说明您打算如何使用它。
标签: mysql sql-order-by