Покупки до блокировки пользователя

SQLMiddle15 минпроверка — Спринтзапрос · PostgreSQL14-t013

Три таблицы: users (id, last_name, first_name), purchases (id, user_id, sku, purchased_at) и blocked_users (user_id, blocked_at) — список заблокированных.

Выведи user_id, last_name, first_name и sku для всех покупок, совершённых пользователем до момента его блокировки (покупки в сам момент блокировки и позже не считаются; у незаблокированных пользователей подходят все покупки). Отсортируй по sku.

schema.sqlsql
1CREATE TABLE users (2    id         int  PRIMARY KEY,3    last_name  text NOT NULL,4    first_name text NOT NULL5);6CREATE TABLE purchases (7    id           int       PRIMARY KEY,8    user_id      int       NOT NULL REFERENCES users (id),9    sku          text      NOT NULL,10    purchased_at timestamp NOT NULL11);12CREATE TABLE blocked_users (13    user_id    int       PRIMARY KEY REFERENCES users (id),14    blocked_at timestamp NOT NULL15);16INSERT INTO users VALUES (1, 'Иванов', 'Иван'), (2, 'Петрова', 'Анна'), (3, 'Сидоров', 'Олег'), (4, 'Козлов', 'Пётр');17INSERT INTO blocked_users VALUES (1, '2024-03-01 12:00'), (3, '2024-01-01 00:00');18INSERT INTO purchases VALUES19    (1, 1, 'A-100', '2024-02-01 10:00'),  -- до блокировки20    (2, 1, 'B-200', '2024-03-01 12:00'),  -- ровно в момент блокировки21    (3, 1, 'C-300', '2024-03-05 09:00'),  -- после22    (4, 2, 'A-100', '2024-01-10 08:00'),  -- не заблокирован23    (5, 2, 'D-400', '2024-06-01 08:00'),24    (6, 3, 'E-500', '2024-02-01 00:00');  -- только после блокировки25-- у Козлова покупок нет
⌘ Enter — проверить