У меня есть следующая таблица.
+----+--------+--------+------------+
| ID | Parent | Status | Date |
+----+--------+--------+------------+
| 1 | 667 | O | 2019-09-23 |
| 1 | 667 | O | 2019-10-01 |
| 1 | 667 | C | 2019-10-12 |
| 1 | 667 | O | 2019-10-31 |
| 33 | 566 | C | 2019-09-28 |
| 33 | 566 | C | 2019-10-03 |
| 33 | 566 | C | 2019-10-17 |
| 33 | 566 | C | 2019-10-23 |
| 33 | 566 | C | 2019-10-29 |
| 2 | 667 | O | 2019-10-01 |
| 2 | 667 | O | 2019-10-12 |
| 2 | 667 | C | 2019-10-31 |
| 34 | 566 | O | 2019-10-03 |
| 34 | 566 | O | 2019-10-17 |
| 34 | 566 | C | 2019-10-23 |
| 34 | 566 | C | 2019-10-29 |
+----+--------+--------+------------+
Теперь мне нужно найти все ID
в таблице между 2019-10-01
и 2019-10-31
, которые имели статус O
во время этого период и имеет статус C
согласно последней записи.
Ожидаемый результат:
+----+--------+--------+------------+
| ID | Parent | Status | Date |
+----+--------+--------+------------+
| 2 | 667 | C | 2019-10-31 |
| 34 | 566 | C | 2019-10-29 |
+----+--------+--------+------------+
Я попытался сделать запрос
SELECT ID, Parent, Status, Date
FROM tabe WHERE Status='C' AND DATE >= '2019-10-01' AND Date <= '2019-10-31' AND ID IN (
SELECT DISTINCT ID FROM tabe WHERE Status='O' AND Date >= '2019-10-01' AND Date <= '2019-10-31'
);
и получил следующий вывод
+----+--------+--------+------------+
| ID | Parent | Status | Date |
+----+--------+--------+------------+
| 1 | 667 | C | 2019-10-12 |
| 2 | 667 | C | 2019-10-31 |
| 34 | 566 | C | 2019-10-23 |
| 34 | 566 | C | 2019-10-29 |
+----+--------+--------+------------+
Любая помощь очень ценится.