arnold
arnold

Reputation: 25

sql - find users who made 3 consecutive actions

i use sql server and i have this table :

ID    Date    Amount

I need to write a query that returns only users that have made at least 3 consecutive purchases, each one larger than the other.

I know that i need to use partition_id and row_number but i dont know how to do it

Thank you in advance

Upvotes: 0

Views: 631

Answers (1)

Gordon Linoff
Gordon Linoff

Reputation: 1269753

If you want three purchases in a row with increases in amount, then use lead() to get the next amounts:

select t.*
from (select t.*,
             lead(amount, 1) over (partition by id order by date) as next_date,
             lead(amount, 2) over (partition by id order by date) as next2_amount
      from t
     ) t
where next_amount > amount and next2_amount > next_amount;

I originally missed the "greater than" part of the question. If you wanted purchases on three days in a row, then:

If you want three days in a row and there is at most one purchase per day, then you can use:

select t.*
from (select t.*,
             lead(date, 2) over (partition by id order by date) as next2_date
      from t
     ) t
where next2_date = dateadd(day, 2, date);

If you can have duplicates on a date, I would suggest this variant:

select t.*
from (select t.*,
             lead(date, 2) over (partition by id order by date) as next2_date
      from (select distinct id, date from t) t
     ) t
where next2_date = dateadd(day, 2, date);

Upvotes: 1

Related Questions