Можно ли посмотреть на две последовательные строки и определить разницу во времени между ними с помощью SQL? - PullRequest
0 голосов
/ 28 июня 2019

Я относительно новичок в SQL, поэтому, пожалуйста, потерпите меня!Я пытаюсь увидеть, сколько клиентов совершают покупки после двух лет бездействия.Соответствующие поля включают cust_id и purchase_date (может быть несколько наблюдений для одного и того же cust_id, но с разными датами).Я использую Redshift для своих сценариев SQL.

Я понимаю, что не могу добавить то же самое для параметров DATEDIFF (это просто не имеет никакого смысла), но я не уверен, что еще делать.

SELECT  *
FROM tickets t
     LEFT JOIN d_customer c
     ON c.cust_id = t.cust_id
WHERE     DATEDIFF(year, t.purchase_date, t.purchase_date) between 0 and 2
ORDER BY t.cust_id, t.purchase_date
;

1 Ответ

0 голосов
/ 28 июня 2019

Я думаю, что вы хотите lag().Чтобы получить соответствующие билеты:

SELECT t.*
FROM (SELECT t.*,
             LAG(purchase_date) OVER (PARTITION BY cust_id ORDER BY purchase_date) as prev_pd
      FROM tickets t
     ) t
WHERE prev_pd < purchase_date - interval '2 year';

Если вы хотите количество клиентов , используйте count(distinct):

SELECT COUNT(DISTINCT cust_id)
FROM (SELECT t.*,
             LAG(purchase_date) OVER (PARTITION BY cust_id ORDER BY purchase_date) as prev_pd
      FROM tickets t
     ) t
WHERE prev_pd < purchase_date - interval '2 year';

Обратите внимание, что они не используют DATEDIFF().Это подсчитывает количество границ между двумя значениями даты.Так, 2018-12-31 и 2019-01-01 имеют разницу в 1 год.

...