@accountnujen

Как доставать последние состояния из всех?

База, куда складывается история состояний/действий/статусов.
Примерно такой вид:
id; название; дата; состояние.
1; АА123; 10.01.23; создан;
2; КК777; 12.01.23; создан;
3; ОО001; 20.01.23; создан;
4; КК777; 12.01.23; оплачен;
5; АА123; 22.01.23; отменён;
6; КК777; 23.01.23; доставлен;


Мне нужно достать последнее состояние каждого. То есть нужно получить
6; КК777; 23.01.23; доставлен;
5; АА123; 22.01.23; отменён;
3; ОО001; 20.01.23; создан;


мой костыльный подход:
добавить поле "актуальность". перед каждой новой записью искать запись по названию, убирать от туда true у поля "актуальность" и записывать новую строку с "актуальность" = true. Таким образом, чтобы получить нужный массив я буду просто делать что-то вроде SELECT * WHERE "актуальность" = true.

Есть ощущение, что это неправильный подход. Поэтому вопрос: как должно быть?
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
SELECT order_number, order_status, order_date
FROM (
    SELECT order_number, order_status, order_date,
    RANK() OVER(PARTITION BY order_number ORDER BY order_date DESC) AS r
    FROM orders
) t
WHERE r = 1


https://sqlize.online/sql/mysql80/684f64221b00cc80...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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