简体   繁体   中英

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

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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM