Получить для каждого момента строки со всеми прошлыми значениями, равными нулю в некотором столбце

0

Скажем, у меня есть таблица MySQL с идентификатором, меткой времени и другим столбцом. Мое приложение добавляет строку каждые 15 минут для каждого идентификатора с нулевым или другим значением в столбце. В конце концов может появиться или исчезнуть новый идентификатор.

+----+------+--------+
| 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 |
+----+------+

Благодарю.

Теги:

1 ответ

0
Лучший ответ

Я думаю, что ниже запрос должен работать для вас. Он проверяет каждый идентификатор, если в колонке "col" в текущей строке и предыдущей строке есть нуль.

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);
  • 1
    Отлично @ скелва !! Оно работает!! И запрос довольно прост и понятен! Я работаю над этим в течение двух дней! :)
  • 0
    Вы можете изменить SELECT MAX (столбец) на SELECT SUM (столбец), если хотите проверить все предыдущие строки. MAX (col) проверяет только немедленный предыдущий.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню