Digamos que eu tenha uma tabela de compras parecida com esta:
Purchases
---------
Item_ID
Purchase_Date
Customer_ID
Como eu conseguiria obter o conjunto de compras, a partir da primeira compra, para cada cliente que esteja pelo menos X dias após a última compra? Por exemplo, se tivermos os dados abaixo e x=10:
Item_ID PurchaseDate Customer_ID
123 07/29/23 1000
123 08/04/23 1000
123 08/16/23 1000
563 07/03/23 7785
563 07/05/23 7785
788 08/17/23 2489
A consulta deve retornar:
Item_ID PurchaseDate Customer_ID
123 07/29/23 1000
123 08/11/23 1000
563 07/03/23 7785
788 08/17/23 2489
Então, para o cliente 1000, a primeira compra conta, porque é uma nova compra. A segunda compra ocorre há menos de 10 dias da última compra, por isso é descartada. A terceira compra deste cliente conta porque é superior ou igual a 10 dias após a última compra. Para o cliente 7785, apenas a primeira conta porque a segunda compra ocorre menos de 10 dias após a última compra e, finalmente, para o cliente 2489, ele tem apenas uma nova compra, então conta apenas como a nova compra. )
Eu estava pensando em usar a função lag
SELECT
t.Item_ID,
t.PurchaseDate,
t.Customer_ID
FROM (
SELECT
p.Item_ID,
p.PurchaseDate,
p.Customer_ID,
LAG OVER(PARTITION BY Customer_ID ORDER BY PurchaseDate) next_purchase
ROW_NUMBER() OVER(PARTITION BY Customer_ID ORDER BY PurchaseDate) rownum
FROM
PurchaseTable p
) t
WHERE
DATEDIFF(DAY, t.PurchaseDate, t.next) >= 10) or rownum=1
EDIT: Desculpas, a descrição estava incorreta. Mudei a pergunta e o exemplo para os detalhes corretos.