数据集:
email brand startdate response_no need logic for conditions to select/filter response
abc wi 4/1/2019 1 (select)
abc wi 9/4/2019 2 (compare with 1st),since less than 6 month, filter out)
abc wi 11/22/2019 3 (compare with 1st), more than 6 month, select)
xyz wi 3/2/2019 1 (select)
xyz wi 10/23/2019 2 (compare with 1st , more than 6 month , select)
xyz wi 11/27/2019 3 (compare with 2nd, less than 6 month , filter out)
xyz msw 2/21/2019 1 (select)
xyz msw 2/20/2020 2 (compare with 1st , more than 6 month , select)根据上面的数据,我需要为每封电子邮件和品牌写一个逻辑,以筛选出从先前选定的回复开始日期起6个月内的回复否。为了前夫。对于电子邮件abc和品牌wi,我在2019/ 4/1/2019有第一次回复(回复号1),第二次回复是9/24/2019 (从第1次回复起5个月),所以我需要过滤掉它,接下来的第3次回复是11/22/2019 (从第一次回复超过6个月),所以不要过滤掉。如果第二次回复比第一次晚了6个月,我需要避免过滤它,然后将第3次回复与第2次而不是第1次进行比较,筛选的检查条件应该在当前响应日期和之前的响应日期之间,而不对每个品牌的电子邮件进行过滤。
发布于 2020-06-17 17:44:54
我相信你们期待的是下面的输出,是吗?

因此,从SQL的角度来看,我做了以下工作(也可以用其他方式解决):
Create Table DB_NM.SCHEMA_NM.TEST (
email varchar(255),
brand varchar(4),
startdate date,
response_no numeric(10,0)
);
Insert Into DB_NM.SCHEMA_NM.TEST VALUES('abc', 'wi', '2019-04-01', 1);
Insert Into DB_NM.SCHEMA_NM.TEST VALUES('abc', 'wi', '2019-09-04', 2);
Insert Into DB_NM.SCHEMA_NM.TEST VALUES('abc', 'wi', '2019-11-22', 3);
Insert Into DB_NM.SCHEMA_NM.TEST VALUES('xyz', 'wi', '2019-03-02', 1);
Insert Into DB_NM.SCHEMA_NM.TEST VALUES('xyz', 'wi', '2019-10-23', 2);
Insert Into DB_NM.SCHEMA_NM.TEST VALUES('xyz', 'wi', '2019-11-27', 3);
Insert Into DB_NM.SCHEMA_NM.TEST VALUES('xyz', 'msw', '2019-02-21', 1);
Insert Into DB_NM.SCHEMA_NM.TEST VALUES('xyz', 'msw', '2020-02-20', 2);SQL:
Select SRC.EMAIL,
SRC.BRAND,
SRC.STARTDATE
From
(
Select EMAIL,
BRAND,
STARTDATE,
lag(STARTDATE) over (partition by EMAIL, BRAND order by STARTDATE) as PREV_DATE,
Case When PREV_DATE Is Null Then -1 Else (-1*(datediff(month,STARTDATE,PREV_DATE))) End as DATE_DIFF_MTH,
Case When PREV_DATE Is Null Then '1949-01-01'
Else Case When (-1*(datediff(month,STARTDATE,PREV_DATE))) < 6
Then lead(STARTDATE) over (partition by EMAIL, BRAND order by STARTDATE)
Else STARTDATE End End as DATE_TO_CONSIDER
From DB_NM.SCHEMA_NM.TEST
Order By 1,2
) P
Inner Join DB_NM.SCHEMA_NM.TEST SRC ON SRC.STARTDATE = P.DATE_TO_CONSIDER
Where P.PREV_DATE IS NOT NULL
Order BY 1,2正如我所说,解决这一问题还有其他办法。希望这能有所帮助!
谢谢
https://stackoverflow.com/questions/62367343
复制相似问题