Advertisement
AlexErin1308

Практика: функции смещения.TASK № 1-3

Jun 14th, 2024
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PostgreSQL 2.15 KB | Source Code | 0 0
  1. --1.Из таблицы tools_shop.orders выведите поля order_id, user_id, paid_at и к ним добавьте поле paid_at с датой предыдущего заказа для каждого пользователя. Если предыдущего заказа нет, выведите дату 1 января 1980 года.
  2.  
  3. SELECT order_id, user_id, paid_at,
  4.        LAG(paid_at, 1, '1980-01-01') OVER(PARTITION BY user_id ORDER BY paid_at) AS previous_paid_at
  5. FROM tools_shop.orders
  6.  
  7. или второй вариант
  8.  
  9. SELECT order_id, user_id, paid_at,
  10.        LAG(paid_at :: date, 1, '1980-01-01') OVER(PARTITION BY user_id ORDER BY paid_at :: date) AS previous_paid_at
  11. FROM tools_shop.orders
  12.  
  13. --2.Выведите поля event_id, event_time, user_id из таблицы tools_shop.events и к ним добавьте поле с датой и временем следующего события для каждого пользователя. Если события нет, оставьте значение NULL.
  14.  
  15. SELECT event_id, event_time, user_id,
  16.        LEAD(event_time, 1, NULL) OVER(PARTITION BY user_id ORDER BY event_time) AS next_event
  17. FROM tools_shop.events
  18.  
  19. --3.Исправьте предыдущий запрос: замените дату следующего события на интервал между текущим и следующим событием. Значение интервала должно быть положительным. Если события нет, оставьте значение NULL.
  20.  
  21. -- Первый вариант. Результат получаем, но перемудрил и тренажер не пропустил.
  22. WITH next_event AS (
  23.     SELECT event_id, event_time, user_id,
  24.         LEAD(event_time, 1, NULL) OVER(PARTITION BY user_id ORDER BY event_time) AS next_event
  25.     FROM tools_shop.events
  26. )
  27. SELECT *, next_event :: date - event_time :: date AS next_event
  28. FROM next_event
  29.  
  30. -- Второй вариант.
  31.  
  32. SELECT event_id, event_time, user_id,
  33. ((LEAD(event_time) OVER (PARTITION BY user_id ORDER BY event_time)) - event_time) AS delta    
  34. FROM tools_shop.events
  35.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement