【问题标题】:Compare a date with other dates within a single column in snowflake将日期与雪花中单个列中的其他日期进行比较
【发布时间】:2021-10-07 08:23:53
【问题描述】:

我有一张下表:

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

我知道带有 Week 或 DAYS 的 DATEDIFF 函数会派上用场。我尝试了不同的 CASE 语句,但我无法达到我想要的结果。

请帮忙!

注意,在我的表格中,特定 PersonID 将只有一个位置:LOCATION 1,但可以有多个 LOCATION 2 和 3

【问题讨论】:

    标签: sql snowflake-cloud-data-platform


    【解决方案1】:

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

    【讨论】:

    • 不完全是我要求的......但从中得到了一个想法......谢谢!欣赏它
    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多