Привет, ЛОР.
Есть таблица table1
в базе sqlite вида
| id | id_parent | date | id_status |
В колонке id_parent
неуникальные значения. Я хочу получить все id_parent
, для которых самая новая запись на основе date
имеет статус 2. В колонке date
даты не в хронологическом порядке.
Пример
| id | id_parent | date | id_status |
| 1 | 1 | 2024-03-17 | 2 |
| 2 | 2 | 2020-01-01 | 2 |
| 3 | 1 | 2023-10-12 | 2 |
| 4 | 1 | 2023-12-31 | 1 |
| 5 | 3 | 2020-03-07 | 1 |
| 6 | 3 | 2018-01-01 | 2 |
Для такой таблицы в результате запроса должно быть
| id_parent |
| 1 |
| 2 |
потому что у id_parent
1 самая большая указанная дата 2024-03-17
и статус на эту дату - 2, а для id_parent
2 запись только одни и она со статусом 2. id_parent
3 не попадает в выборку, у него самая большая дата со статусом 1.
Использую такой запрос
SELECT id_parent FROM table1 AS t WHERE date = (SELECT MAX(date) FROM table1 WHERE id_parent = t.id_parent) AND id_status = 2;
Вопрос в том, правильный ли он и насколько он оптимальный для использования при большом кол-ве записей (десятки тысяч).