Запрос на уникальность в разные года. Как составить?

Есть таблица оплат, с некоторыми полям, но меня интересуют
id - айдишник пользователя
status - (1 -0 в зависимости от успеха оплаты)
amount - сумма
created_at - дата оплаты.

Нужно найти такие id, которые оплачивали в 2022 (поле created_at) году, но НЕ оплачивали в 2023.
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
@firstmixon
select distinct t.id_user from Table as t
where t.year=2023 and t.id_user not in (select distinct id_user from Table where year=2022)

типа так
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
rozhnev
@rozhnev Куратор тега SQL
Fullstack programmer, DBA, медленно, дорого
NOT EXISTS эффективней чем NOT IN
select distinct t.id_user from T as t
where 
    t.year = 2023 and 
    not exists (select id_user from T tt where year = 2022 and tt.id_user = t.id_user);


другие варианты решения задачи:
-- LEFT JOIN
select distinct t.id_user 
from T as t
left join T tt on tt.year = 2022 and tt.id_user = t.id_user
where t.year = 2023 and tt.id_user is null;

-- EXCEPT
select distinct t.id_user from T as t
where t.year = 2023
except
select distinct t.id_user from T as t
where t.year = 2022
;
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы