【发布时间】:2019-01-17 14:08:05
【问题描述】:
Table Name: entries
ID (int)
rootID (int)
categoryID (int)
editDate (dateTime [ default null ])
createdDate (dateTime [ default NOW() ])
+--+--------+----------+---------------------+---------------------+
|ID| rootID |categoryID| editDate | createdDate |
+--+--------+----------+---------------------+---------------------+
| 1| 1 | 1 | 2018-05-02 18:59:01 | 2018-04-01 18:52:37 |
| 2| 1 | 1 | null | 2018-05-02 18:59:01 |
| 3| 3 | 1 | 2018-06-10 19:32:01 | 2018-06-10 19:12:01 |
| 4| 3 | 1 | 2018-07-11 18:52:01 | 2018-06-10 19:32:01 |
| 5| 3 | 1 | null | 2018-07-11 18:52:01 |
| 6| 6 | 1 | 2018-10-09 12:38:01 | 2018-10-09 12:27:01 |
| 7| 6 | 1 | null | 2018-10-09 12:38:01 |
| 8| 8 | 2 | 2018-11-09 08:12:11 | 2018-12-09 10:12:01 |
| 9| 8 | 2 | null | 2018-11-09 08:12:11 |
+--+--------+----------+---------------------+---------------------+
您好,我正在尝试从具有此结构的表中选择信息。我需要从所有 rootID 中返回类别 1 中的所有行,但仅在 editDate 为 null 的情况下以及每个 rootID 中的 min(createdDate) 处返回。
我希望得到第 2、5 和 7 行的结果。但是,如果要将 ID[4] 的 editDate 值替换为 NULL,那么对于 rootID 3,必须返回 ID 4 而不是 5。
我一直在寻找类似的帖子,我找到的最接近的是这个: SQL MIN Function with where clause
我觉得我很接近我在那里找到的一个例子,但他们使用了两个表,我只能使用这个。这是我现在正在尝试的:
SELECT * FROM entries e WHERE e.categoryID=1 AND e.editDate is NULL AND e.createdDate in(SELECT min(createdDate) FROM entries)
但是,这仅从第一个 rootID 的最早创建日期返回一个条目。我无法理解查询,但我开始了解它是如何仅引用一个条目的。
我正在寻找的是从 categoryID=1,找到每个不同 rootID 的 ID,其中最早 createdDate 的行具有 NULL 编辑日期。如何更改它以从每个根返回一个?谢谢大家的时间。我将继续发布今晚尝试的 SQL。
【问题讨论】: