首页 > 解决方案 > 将日期与雪花中单个列中的其他日期进行比较

问题描述

我有一个下表:

**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

标签: sqlsnowflake-cloud-data-platform

解决方案


使用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';

推荐阅读