sql - SQL 返回时间范围内第一次出现的结果
问题描述
我只想在购买日期后 1 年内的指定时间范围内返回每个用户 ID 的第一个处理日期交易。
从我们所拥有的:
User ID Transaction Purchase D Process Date
ZZ1316567 11004463720 10/4/2018 3/9/2020
ZZ1316567 41004401606 10/4/2018 1/9/2019
ZZ1316567 41004413203 10/4/2018 5/10/2019
ZZ1316567 41004447152 10/4/2018 10/23/2019
ZZ1316567 41004462755 10/4/2018 10/23/2019
VV1454366 41004457424 4/27/2017 12/11/2019
VV1454366 51004365427 4/27/2017 8/10/2018
VV1454366 11004401749 3/24/2017 12/20/2018
SS1456449 41004315438 3/24/2017 10/31/2017
SS1456449 41004323671 3/24/2017 12/14/2017
SS1456449 41004329229 3/24/2017 1/15/2018
SS1456449 41004356097 3/24/2017 6/11/2018
SS1456449 51004292754 3/24/2017 6/7/2017
SS1456449 51004334495 3/24/2017 1/15/2018
TT1474544 11004409317 6/30/2017 4/14/2019
TT1474544 41004428284 6/30/2017 8/7/2019
这个:
Select *
From (
Select Distinct USER_ID, Transaction, Purchase_date, Process_date
Row_Number() OVER (PARTITION BY USER_ID ORDER BY Transaction) AS Uniqueness
From Table1
Where Purchase_date between DATEADD(YEAR,-4,GetDate()) and GetDate()
AND Purchase_date < DATEADD(year, 1, process_date)
) As Z
Where Uniqueness = 1
我想要的是它仅限于此,因为以下这些是列表中唯一的交易,其交易处理日期在购买日期后 1 年内,并且是这些交易中的第一笔交易,即使在那段时间内同一用户还有另一笔交易-frame 即排除不符合此标准的任何和所有内容:
User ID Transaction Purchase Date Process Date
ZZ1316567 41004401606 10/4/2018 1/9/2019
SS1456449 51004292754 3/24/2017 6/7/2017
我错过了什么?我要解决这个问题了吗?
解决方案
唯一的问题是“交换Purchase_date
和Process_date
”。
只需进行如下更改,您应该会得到所需的结果:
AND process_date < DATEADD(year, 1, Purchase_date)
另外,请按照@avery_larryProcess_date
的建议使用。order by