sql - 将日期与雪花中单个列中的其他日期进行比较
问题描述
我有一个下表:
**Person Id LOCATION VISIT_DATE**
12345 LOCATION1 27/01/2020
12345 LOCATION2 12/02/2018
12345 LOCATION2 09/08/2018
12345 LOCATION2 12/07/2018
12345 LOCATION2 31/01/2020
12345 LOCATION2 07/10/2019
12345 LOCATION2 30/04/2019
12345 LOCATION3 28/09/2018
12345 LOCATION3 18/02/2020
我想将 LOCATION1 的日期与其他位置的日期进行比较(此处:LOCATION 2 和 3)
我想从这里实现的是,我想检查一个特定的 person_id(这里:12345)是否在访问位置 1 的 4 周内具有位置 2 或位置 3 访问日期。
在这里,我们可以看到该人在地点 2 和地点 3 有两个符合上述标准的日期(即日期在访问地点 1 的 4 周内),如果他们不这样做,则应将此类成员标记为“Y”在位置 1 日期的 4 周内没有位置 2 和 3 日期,则应将它们标记为“N”。
我知道DATEDIFF
带有 Week 或 DAYS 的函数会为此派上用场。我尝试了不同的 CASE 语句,但我无法达到我想要的结果。
请帮忙 !
请注意,在我的特定 PersonID 表中,只有一个位置:位置 1,但可以有多个位置 2 和 3
解决方案
使用JOIN
:
SELECT DISTINCT t1.*
FROM tab t1
JOIN tab t2
ON t1.PersonId = t2.PersonId
AND t2.Location = 'LOCATION2'
AND ABS(DATEDIFF(day, t1.VISIIT_DATE, t2.VISIT_DATE)) <= 28
JOIN tab t3
ON t1.PersonId = t3.PersonId
AND t3.Location = 'LOCATION3'
AND ABS(DATEDIFF(day, t1.VISIIT_DATE, t3.VISIT_DATE)) <= 28
WHERE t1.PersonId = 12345
AND t1.Location = 'LOCATION1';
推荐阅读
- python - PostgreSQL:PL/Python 函数不采用 ARRAY 输入参数
- javascript - 如何将字符串数组的每个元素拆分为不同的类别?
- python - 自动将键值对附加到字典
- android - RecoverableSecurityException 无法访问内容://媒体/外部/音频/媒体
- sql - 光标内的光标?
- kql - 使用 Kusto(防御者 ATP 高级搜索)在 URL 中查找域
- sql - 从 SQL Server 查询结果中删除时间戳
- php - Laravel 数据透视表多次附加重复项
- javascript - Apollo Server Federation 没有解决?
- html - html/css 文本框格式化