【问题标题】:Get, for every instant, the rows with all past values to null in some column每时每刻获取某列中所有过去值都为空的行
【发布时间】:2018-06-29 16:32:53
【问题描述】:

假设我有一个带有 ID、时间戳和另一列的 MySQL 表。我的应用程序每 15 分钟为每个 ID 添加一行,列中包含 null 或其他值。最终,新的 ID 可能会出现或消失。

+----+------+--------+
| ID | time | column |
+----+------+--------+
| 1  | 8:00 | A      |
+----+------+--------+
| 2  | 8:00 | null   |
+----+------+--------+
| 3  | 8:00 | B      |
+----+------+--------+
| 4  | 8:00 | null   |
+----+------+--------+
| 1  | 8:15 | A      |
+----+------+--------+
| 2  | 8:15 | null   |
+----+------+--------+
| 3  | 8:15 | null   |
+----+------+--------+
| 4  | 8:15 | null   |
+----+------+--------+
| 5  | 8:15 | null   |
+----+------+--------+
| 1  | 8:30 | A      |
+----+------+--------+
| 2  | 8:30 | null   |
+----+------+--------+
| 3  | 8:30 | B      |
+----+------+--------+
| 4  | 8:30 | C      |
+----+------+--------+
| 5  | 8:30 | null   |
+----+------+--------+
| 1  | 8:45 | A      |
+----+------+--------+
| 2  | 8:45 | null   |
+----+------+--------+
| 3  | 8:45 | null   |
+----+------+--------+
| 4  | 8:45 | C      |
+----+------+--------+
| 5  | 8:45 | D      |
+----+------+--------+

我想要一个查询,为每个时间戳提供当前行和过去行中列中为空的所有行。

预期结果:

+----+------+
| ID | time |
+----+------+
| 2  | 8:00 |
+----+------+
| 4  | 8:00 |
+----+------+
| 2  | 8:15 |
+----+------+
| 4  | 8:15 |
+----+------+
| 5  | 8:15 |
+----+------+
| 2  | 8:30 |
+----+------+
| 5  | 8:30 |
+----+------+
| 2  | 8:45 |
+----+------+

谢谢。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    我认为以下查询应该适合您。它正在检查每个 id 是否在当前行和上一行的 'col' 中有 null。

    SELECT 
        t1.id, t1.time
    FROM
        test t1
    WHERE
        t1.col IS NULL
        AND ((SELECT MAX(col) FROM test WHERE id = t1.id AND time < t1.time) IS NULL);
    

    【讨论】:

    • 伟大的@skelwa!有用!!而且查询非常简单明了!我已经为此工作了两天!! :)
    • 如果要检查所有先前的行,可以将 SELECT MAX(col) 更改为 SELECT SUM(col)。 MAX(col) 只检查前一个。
    猜你喜欢
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多