@Mr-Governor
Губернирую

Как получить записи с последним статусом из истории изменений?

Есть таблица, где фиксируется изменение статуса задачи:
Имеются след. поля: id, ключ_задачи, статус, дата_установки_статуса.

Таблица move_history:
| id | key    | status    | created    |
| 1  | VK-333 | COMPLETED | 2022-01-01 |
| 2  | VK-333 | COMPLETED | 2022-01-02 |
| 3  | VK-111 | CANCELED  | 2022-01-01 |
| 4  | PA-222 | COMPLETED | 2022-01-01 |
| 5  | PA-222 | CANCELED  | 2022-01-02 |
| 6  | PA-222 | COMPLETED | 2022-01-03 |
| 7  | PA-222 | COMPLETED | 2022-01-04 |
| 8  | VK-444 | CANCELED  | 2022-01-01 |


Необходимо получить список задач со статусом COMPLETED и последний статус задачи.
Должно получится так:
| id | key    | status    | created    |
| 2  | VK-333 | COMPLETED | 2022-01-02 |
| 7  | PA-222 | COMPLETED | 2022-01-04 |


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

Тут песочница: sqlfiddle.com/#!17/be3ad6/8 со схемой
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега SQL
Fullstack programmer, DBA, медленно, дорого
WITH d AS (
SELECT 
	*,
	row_number() over (partition by key order by created desc) rn
FROM move_history
 ) SELECT * 
 FROM d 
 WHERE status = 'COMPLETED' 
 AND rn = 1
 ORDER BY id;


run SQL online
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы