Calculate running total of "consecutive days without views" for each group, that can restart multiple times within each group based on conditions
1
vote
1
answer
950
views
**Summary**
I'm working to create a counter metric that shows, for each client's slug, the number of consecutive days of zero views.
* The counter should increase for each consecutive day that the client's slug doesn't receive a view.
* If/once the slug gets a view, then the counter should restart.
I can figure out a regular running total, but I can't seem to figure out how to make it restart. I've tried several ways with aggregate/window functions, but I can't seem to achieve the desired results.
---
**Source data**
dcev_zero_views_flag
| client_name | slug | calendar_date | views | consecutive_zero_views_flag |
|--------------------|------------------------------|--------------------------|-------|-----------------------------|
| Ambition LLC | canyon_properties | 2022-02-16T00:00:00.000Z | 2 | 0 |
| Ambition LLC | canyon_properties | 2022-02-17T00:00:00.000Z | 0 | 0 |
| Ambition LLC | canyon_properties | 2022-02-18T00:00:00.000Z | 0 | 1 |
| Ambition LLC | canyon_properties | 2022-02-19T00:00:00.000Z | 0 | 1 |
| Ambition LLC | canyon_properties | 2022-02-20T00:00:00.000Z | 2 | 0 |
| Ambition LLC | canyon_properties | 2022-02-21T00:00:00.000Z | 0 | 0 |
| Ambition LLC | canyon_properties | 2022-02-22T00:00:00.000Z | 0 | 1 |
| Ambition LLC | canyon_properties | 2022-02-23T00:00:00.000Z | 1 | 0 |
| Ambition LLC | city_station_apartment_homes | 2022-02-16T00:00:00.000Z | 0 | 0 |
| Ambition LLC | city_station_apartment_homes | 2022-02-17T00:00:00.000Z | 0 | 1 |
| Ambition LLC | city_station_apartment_homes | 2022-02-18T00:00:00.000Z | 3 | 0 |
| Ambition LLC | city_station_apartment_homes | 2022-02-19T00:00:00.000Z | 2 | 0 |
| Ambition LLC | city_station_apartment_homes | 2022-02-20T00:00:00.000Z | 0 | 0 |
| Ambition LLC | city_station_apartment_homes | 2022-02-21T00:00:00.000Z | 0 | 1 |
| Ambition LLC | city_station_apartment_homes | 2022-02-22T00:00:00.000Z | 0 | 1 |
| Ambition LLC | city_station_apartment_homes | 2022-02-23T00:00:00.000Z | 2 | 0 |
| D&D Properties Inc | east_side_living_spaces | 2022-02-16T00:00:00.000Z | 0 | 0 |
| D&D Properties Inc | east_side_living_spaces | 2022-02-17T00:00:00.000Z | 1 | 0 |
| D&D Properties Inc | east_side_living_spaces | 2022-02-18T00:00:00.000Z | 0 | 0 |
| D&D Properties Inc | east_side_living_spaces | 2022-02-19T00:00:00.000Z | 1 | 0 |
| D&D Properties Inc | east_side_living_spaces | 2022-02-20T00:00:00.000Z | 0 | 0 |
| D&D Properties Inc | east_side_living_spaces | 2022-02-21T00:00:00.000Z | 1 | 0 |
| D&D Properties Inc | east_side_living_spaces | 2022-02-22T00:00:00.000Z | 0 | 0 |
| D&D Properties Inc | east_side_living_spaces | 2022-02-23T00:00:00.000Z | 0 | 1 |
| D&D Properties Inc | happy_mountain_homes | 2022-02-16T00:00:00.000Z | 1 | 0 |
| D&D Properties Inc | happy_mountain_homes | 2022-02-17T00:00:00.000Z | 0 | 0 |
| D&D Properties Inc | happy_mountain_homes | 2022-02-18T00:00:00.000Z | 0 | 1 |
| D&D Properties Inc | happy_mountain_homes | 2022-02-19T00:00:00.000Z | 0 | 1 |
| D&D Properties Inc | happy_mountain_homes | 2022-02-20T00:00:00.000Z | 0 | 1 |
| D&D Properties Inc | happy_mountain_homes | 2022-02-21T00:00:00.000Z | 0 | 1 |
| D&D Properties Inc | happy_mountain_homes | 2022-02-22T00:00:00.000Z | 1 | 0 |
| D&D Properties Inc | happy_mountain_homes | 2022-02-23T00:00:00.000Z | 0 | 0 |
For reference, the consecutive_zero_views_flag
column in returns 1
if the view count for the current and preceding day = 0. Otherwise, it returns 0
. It's derived by:
case when
dcev.views = 0
and dcev.views = lag(dcev.views) over (PARTITION by client_name, slug ORDER BY dcev.calendar_date)
then 1
else 0
end as consecutive_zero_views_flag
---
**Desired output**
I want to add a column, consecutive_days_without_views
. That should represent a running total of the consecutive_zero_views_flag
for each (client_name slug) combination ordered by date. But, the running total should restart any time consecutive_zero_views_flag
changes from 1 to 0 for each client_name/slug combination, in order of date.
**Example of desired output**
Note the last row of the example below that shows the 2 for consecutive_days_without_views
.
| client_name | slug | calendar_date | views | consecutive_zero_views_flag | consecutive_days_without_views |
|--------------------|------------------------------|--------------------------|-------|-----------------------------|--------------------------------|
| Ambition LLC | canyon_properties | 2022-02-16T00:00:00.000Z | 2 | 0 | 0 |
| Ambition LLC | canyon_properties | 2022-02-17T00:00:00.000Z | 0 | 0 | 0 |
| Ambition LLC | canyon_properties | 2022-02-18T00:00:00.000Z | 0 | 1 | 1 |
| Ambition LLC | canyon_properties | 2022-02-19T00:00:00.000Z | 0 | 1 | 2 |
| Ambition LLC | canyon_properties | 2022-02-20T00:00:00.000Z | 2 | 0 | 0 |
| Ambition LLC | canyon_properties | 2022-02-21T00:00:00.000Z | 0 | 0 | 0 |
| Ambition LLC | canyon_properties | 2022-02-22T00:00:00.000Z | 0 | 1 | 1 |
| Ambition LLC | canyon_properties | 2022-02-23T00:00:00.000Z | 1 | 0 | 0 |
| Ambition LLC | city_station_apartment_homes | 2022-02-16T00:00:00.000Z | 0 | 0 | 0 |
| Ambition LLC | city_station_apartment_homes | 2022-02-17T00:00:00.000Z | 0 | 1 | 1 |
| Ambition LLC | city_station_apartment_homes | 2022-02-18T00:00:00.000Z | 3 | 0 | 0 |
| Ambition LLC | city_station_apartment_homes | 2022-02-19T00:00:00.000Z | 2 | 0 | 0 |
| Ambition LLC | city_station_apartment_homes | 2022-02-20T00:00:00.000Z | 0 | 0 | 0 |
| Ambition LLC | city_station_apartment_homes | 2022-02-21T00:00:00.000Z | 0 | 1 | 1 |
| Ambition LLC | city_station_apartment_homes | 2022-02-22T00:00:00.000Z | 0 | 1 | 2 |
| Ambition LLC | city_station_apartment_homes | 2022-02-23T00:00:00.000Z | 2 | 0 | 0 |
| D&D Properties Inc | east_side_living_spaces | 2022-02-16T00:00:00.000Z | 0 | 0 | 0 |
| D&D Properties Inc | east_side_living_spaces | 2022-02-17T00:00:00.000Z | 1 | 0 | 0 |
| D&D Properties Inc | east_side_living_spaces | 2022-02-18T00:00:00.000Z | 0 | 0 | 0 |
| D&D Properties Inc | east_side_living_spaces | 2022-02-19T00:00:00.000Z | 1 | 0 | 0 |
| D&D Properties Inc | east_side_living_spaces | 2022-02-20T00:00:00.000Z | 0 | 0 | 0 |
| D&D Properties Inc | east_side_living_spaces | 2022-02-21T00:00:00.000Z | 1 | 0 | 0 |
| D&D Properties Inc | east_side_living_spaces | 2022-02-22T00:00:00.000Z | 0 | 0 | 0 |
| D&D Properties Inc | east_side_living_spaces | 2022-02-23T00:00:00.000Z | 0 | 1 | 1 |
| D&D Properties Inc | happy_mountain_homes | 2022-02-16T00:00:00.000Z | 1 | 0 | 0 |
| D&D Properties Inc | happy_mountain_homes | 2022-02-17T00:00:00.000Z | 0 | 0 | 0 |
| D&D Properties Inc | happy_mountain_homes | 2022-02-18T00:00:00.000Z | 0 | 1 | 1 |
| D&D Properties Inc | happy_mountain_homes | 2022-02-19T00:00:00.000Z | 0 | 1 | 2 |
| D&D Properties Inc | happy_mountain_homes | 2022-02-20T00:00:00.000Z | 0 | 1 | 3 |
| D&D Properties Inc | happy_mountain_homes | 2022-02-21T00:00:00.000Z | 0 | 1 | 4 |
| D&D Properties Inc | happy_mountain_homes | 2022-02-22T00:00:00.000Z | 1 | 0 | 0 |
| D&D Properties Inc | happy_mountain_homes | 2022-02-23T00:00:00.000Z | 0 | 0 | 0 |
Asked by Matthew
(21 rep)
Feb 23, 2022, 08:56 PM
Last activity: Feb 24, 2022, 03:24 AM
Last activity: Feb 24, 2022, 03:24 AM