I want to find the number of reports a user has submitted since a user last received a personalized response. The column response_type has 3 possible values: “No Response,” “Templated Response,” and “Personalized Response”
I wrote a query that has the most recent cases at the top.
SELECT case_number, short_description, flight_date_only, CAST(created_on AS DATE), origin_station, destination_station, flight_number, state_label, response_type, close_notes FROM "foundry_sync"."Monthly Reports/voice_cases (w Response Type)-master-0309" WHERE contact LIKE '%{{w_ContactName.text}}' ORDER BY CAST(created_on AS DATE) DESC
I would like to count the number of reports since the last response_type = “Personalized Response” and return the date of the last “Personalized Response”enter image description here
Advertisement
Answer
I want to find the number of reports a user has submitted since a user last received a personalized response.
You can use ROW_NUMBER()
to assign a rank to each record by descending date within contact groups, and then check the row number of the last record having the concerned response, like:
SELECT contact, MAX(CASE WHEN response_type = 'Personalized Response' THEN rn END) - 1 records_since_last_response FROM ( SELECT contact, response_type, ROW_NUMBER() OVER(PARTITION BY contact ORDER BY cast(created_on as date) DESC) rn FROM "foundry_sync"."Monthly Reports/voice_cases (w Response Type)-master-0309" t ) x GROUP BY contact
To filter on a given contact, you can simply add a WHERE
clause to the inner (or outer) query. If you really need this LIKE
condition on the contact
:
SELECT MAX(CASE WHEN response_type = 'Personalized Response' THEN rn END) - 1 records_since_last_response FROM ( SELECT response_type, ROW_NUMBER() OVER(ORDER BY cast(created_on as date) DESC) rn FROM "foundry_sync"."Monthly Reports/voice_cases (w Response Type)-master-0309" t WHERE contact LIKE '%{{w_ContactName.text}}' ) x