Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --1.Из таблицы tools_shop.orders выведите поля order_id, user_id, paid_at и к ним добавьте поле paid_at с датой предыдущего заказа для каждого пользователя. Если предыдущего заказа нет, выведите дату 1 января 1980 года.
- SELECT order_id, user_id, paid_at,
- LAG(paid_at, 1, '1980-01-01') OVER(PARTITION BY user_id ORDER BY paid_at) AS previous_paid_at
- FROM tools_shop.orders
- или второй вариант
- SELECT order_id, user_id, paid_at,
- LAG(paid_at :: date, 1, '1980-01-01') OVER(PARTITION BY user_id ORDER BY paid_at :: date) AS previous_paid_at
- FROM tools_shop.orders
- --2.Выведите поля event_id, event_time, user_id из таблицы tools_shop.events и к ним добавьте поле с датой и временем следующего события для каждого пользователя. Если события нет, оставьте значение NULL.
- SELECT event_id, event_time, user_id,
- LEAD(event_time, 1, NULL) OVER(PARTITION BY user_id ORDER BY event_time) AS next_event
- FROM tools_shop.events
- --3.Исправьте предыдущий запрос: замените дату следующего события на интервал между текущим и следующим событием. Значение интервала должно быть положительным. Если события нет, оставьте значение NULL.
- -- Первый вариант. Результат получаем, но перемудрил и тренажер не пропустил.
- WITH next_event AS (
- SELECT event_id, event_time, user_id,
- LEAD(event_time, 1, NULL) OVER(PARTITION BY user_id ORDER BY event_time) AS next_event
- FROM tools_shop.events
- )
- SELECT *, next_event :: date - event_time :: date AS next_event
- FROM next_event
- -- Второй вариант.
- SELECT event_id, event_time, user_id,
- ((LEAD(event_time) OVER (PARTITION BY user_id ORDER BY event_time)) - event_time) AS delta
- FROM tools_shop.events
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement