I'm trying to count the number of days since the last activity. My data is weekly aggregated. I'm able to do the lag but not able to include the current week.
Data:
ID DATE CHANNEL VENDOR ENG
xyz 2022-11-18 EMAIL ALPHA 1
xyz 2022-11-25 EMAIL ALPHA 1
xyz 2022-12-09 EMAIL ALPHA 1
xyz 2022-12-16 EMAIL ALPHA 0
xyz 2022-12-23 EMAIL ALPHA 0
xyz 2022-12-30 EMAIL ALPHA 3
I would like to have the output to be as follows:
ID DATE CHANNEL VENDOR ENG n_days
xyz 2022-11-18 EMAIL ALPHA 1 0
xyz 2022-11-25 EMAIL ALPHA 1 0
xyz 2022-12-09 EMAIL ALPHA 1 0
xyz 2022-12-16 EMAIL ALPHA 0 7
xyz 2022-12-23 EMAIL ALPHA 0 14
xyz 2022-12-30 EMAIL ALPHA 3 0
I have written a query but it not able to include the most latest week. Below is my query:
SELECT DISTINCT ID, DATE, CHANNEL, VENDOR,
DATE - LAG(DATE) OVER (PARTITION BY ID, CHANNEL, VENDOR ORDER BY DATE) AS "NDAYS_LAST_ENGAGED_CHANNEL_VENDOR"
FROM
tab1
WHERE
ENG>0
I was able to construct a right query that would give difference in days since last event in a chronological order with a massive help of James Casey. The query is as below:
QUERY:
SELECT T1.ID, T1.DATE, T1.CHANNEL, T1.VENDOR,
IFNULL(MIN(DATEDIFF(DD, T_ENG.EVENT_DATE, T1.EVENT_DATE)), -1) AS "N_DAYS"
FROM
TAB1 AS T1
LEFT OUTER JOIN
TAB1 AS T_ENG
ON T_ENG.ENG>0 AND T1.ID=T_ENG.ID AND T1.CHANNEL=T_ENG.CHANNEL AND T1.VENDOR=T_ENG.VENDOR
AND DATEDIFF(DD, T_ENG.DATE, T1.DATE)>=0
GROUP BY
T1.ID, T1.DATE, T1.CHANNEL, T1.VENDOR
ORDER BY 2;