Задать вопрос
@CenterJoin

Выбрать из двух записей одну, к-рая добавлена позже?

Нужна ваша помощь. Задача вывести последний статус определенного контакта, т.е. контакт может менять статус много раз. Как видно из примера ниже у контакта 121750 сначала был статус "not_authorized", затем "authorized". Тут есть проблема с фильтрацией по статусу. Если выводить список контактов с любым из статусов ("not_authorized", "authorized"), то в обоих случаях контакт 121750 выводится, но это не то, что я хотел бы видеть. Мне нужен только контакт с последним статусом authorized, поскольку он был добавлен в последнюю очередь; а со статусом not_authorized нужно что-то сделать, чтобы он не отображался даже когда contact_status.status = 'not_authorized'. Я пытался написать запрос, который разместил ниже.

id      created_at                     contact_id     status

406,    2022-11-15 14:54:20.483000,    121750,        not_authorized
407,    2022-11-15 14:55:39.834000,    121750,        authorized


SELECT DISTINCT ON (contact_id) id, created_at, contact_id, status
    FROM
        contact_status
    WHERE
        contact_status.status = 'authorized'  # OR contact_status.status = 'not_authorized' 
        AND contact_id=121750
ORDER BY contact_id, created_at DESC
  • Вопрос задан
  • 56 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
iMedved2009
@iMedved2009
Не люблю людей
SELECT id, created_at, contact_id, status
    FROM contact_status
    WHERE
        contact_status.id in (select max(id) as id from contact_status group by contact_id)
        contact_status.status = 'authorized'
ORDER BY contact_id, created_at DESC


В случае с одной записью
SELECT id, created_at, contact_id, status
    FROM contact_status
    WHERE
        contact_status.id in (select max(id) as id from contact_status where contact_id=121750 group by contact_id )
        contact_status.status = 'authorized'
ORDER BY contact_id, created_at DESC
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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