I am trying to figure the best way to get a count of how many times a record was sent back to the user (Status changed from 3 or 4 back to 1)
this is what my data looks like
ID record_id status_id 1 10909 2 2 10909 3 3 10909 1 4 10909 3 5 10909 3 6 10909 4 7 10909 5
Advertisement
Answer
SQL tables represent unordered sets. There is no “previous” or “next” row, unless a column specifies the ordering.
Your data does not seem to have such a column. But if you did, you could use lag():
select record_id, count(*)
from (select t.*,
lag(status) over (partition by record_id order by <ordering column>) as prev_status
from t
) t
where status = 1 and prev_status in (3, 4)
group by record_id;