@@ -816,15 +816,15 @@ latest_status_before_range AS (
816
816
SELECT
817
817
DISTINCT usc .user_id ,
818
818
usc .new_status ,
819
- usc .changed_at
819
+ usc .changed_at ,
820
+ ud .deleted
820
821
FROM user_status_changes usc
821
822
LEFT JOIN LATERAL (
822
823
SELECT COUNT (* ) > 0 AS deleted
823
824
FROM user_deleted ud
824
- WHERE ud .user_id = usc .user_id AND ud .changed_at < usc .changed_at
825
- ) AS ud ON usc . user_id = ud . user_id
825
+ WHERE ud .user_id = usc .user_id AND ( ud .deleted_at < usc .changed_at OR ud . deleted_at < @start_time)
826
+ ) AS ud ON true
826
827
WHERE usc .changed_at < @start_time::timestamptz
827
- AND NOT ud .deleted
828
828
ORDER BY usc .user_id , usc .changed_at DESC
829
829
),
830
830
-- status_changes_during_range defines the status of each user during the start_time and end_time.
@@ -835,16 +835,16 @@ status_changes_during_range AS (
835
835
SELECT
836
836
usc .user_id ,
837
837
usc .new_status ,
838
- usc .changed_at
838
+ usc .changed_at ,
839
+ ud .deleted
839
840
FROM user_status_changes usc
840
841
LEFT JOIN LATERAL (
841
842
SELECT COUNT (* ) > 0 AS deleted
842
843
FROM user_deleted ud
843
- WHERE ud .user_id = usc .user_id AND ud .changed_at < usc .changed_at
844
- ) AS ud ON usc . user_id = ud . user_id
844
+ WHERE ud .user_id = usc .user_id AND ud .deleted_at < usc .changed_at
845
+ ) AS ud ON true
845
846
WHERE usc .changed_at >= @start_time::timestamptz
846
847
AND usc .changed_at <= @end_time::timestamptz
847
- AND NOT deleted
848
848
),
849
849
-- relevant_status_changes defines the status of each user at any point in time.
850
850
-- It includes the status of each user before the start_time, and the status of each user during the start_time and end_time.
@@ -854,6 +854,7 @@ relevant_status_changes AS (
854
854
new_status,
855
855
changed_at
856
856
FROM latest_status_before_range
857
+ WHERE NOT deleted
857
858
858
859
UNION ALL
859
860
@@ -862,6 +863,7 @@ relevant_status_changes AS (
862
863
new_status,
863
864
changed_at
864
865
FROM status_changes_during_range
866
+ WHERE NOT deleted
865
867
),
866
868
-- statuses defines all the distinct statuses that were present just before and during the time range.
867
869
-- This is used to ensure that we have a series for every relevant status.
0 commit comments