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