Добавить дополнительную ценность к самой новой записи (но показать все записи) - PullRequest
0 голосов
/ 28 апреля 2020

Мне нужно создать представление в MariaDB, которое содержит все данные из таблицы states:

| id | user_id | state |

Но для самой новой записи для каждого пользователя (на основе наибольшего идентификатора состояния для каждого пользователя). Я также должен добавить столбец is_newest и установить его в true (1) - остальные записи должны получить false (0).

Возможно ли это сделать в запросе?

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Вы можете сделать это с NOT EXISTS:

select s.*, 
  (not exists(select 1 from states where user_id = s.user_id and id > s.id)) is_newest
from states s

См. Упрощенную демонстрацию .

1 голос
/ 28 апреля 2020

Если вы используете MariaDB 10.3 или выше, вы можете использовать row_number():

create view states_view as
select 
    id,
    user_id,
    state,
    (row_number() over(partition by user_id order by id desc) = 1) is_newest
from states

В более ранних версиях, когда оконные функции недоступны, один из вариантов - присоединение к агрегированному запросу:

create view states_view as
select 
    s.id,
    s.user_id,
    s.state,
    (s.id = m.max_id) is_newest
from states s
inner join (select user_id, max(id) max_id from states group by user_id) m
    on m.user_id = s.user_id
...