SQL-Snowflake - 如何使用 WHERE 条件计算 2 行或更多行中的日期之间的天数

问题描述 投票:0回答:1
国家 商店_ID 订单_日期
990003975 2023-01-24
FR 990004963 2023-04-11
FR 990005204 2023-06-15
FR 990005204 2023-06-10
FR 990005204 2023-06-07
JP 990005210 2023-01-08

我的数据如上表所示。 我需要一种方法来添加一列,显示同一 STORE_ID 的日期之间的天数差异,按 DESC 顺序对它们进行排序,我需要顶部日期和前一个日期之间的差异。对同一 STORE_ID 的其他日期(如果存在)重复此操作。 如果没有更多日期或只有 1 个日期,则输入 0。 因此,对于这个例子,我需要得到这样的东西:

国家 商店_ID 订单_日期 天数
990003975 2023-01-24 0
FR 990004963 2023-04-11 0
FR 990005204 2023-06-15 5
FR 990005204 2023-06-10 3
FR 990005204 2023-06-07 0
JP 990005210 2023-01-08 0

我尝试了在另一个问题中看到的类似方法,但不确定为什么它对我不起作用(我在新列中得到空值)

SELECT  country,
        store_id,
        order_date,
        NextDate,
        DATEDIFF(day, order_date, NextDate)
FROM    (   SELECT  country,
                    store_id,
                    order_date,
                    (   SELECT  MIN(order_date) 
                        FROM    main T2
                        WHERE   T2.store_id = T1.store_id
                        AND     T2.country > T1.country
                        AND     T2.order_date > T1.order_date
                    ) AS NextDate
            FROM    main T1
        ) AS T
order by 2,3
sql snowflake-cloud-data-platform
1个回答
1
投票

所以我在 LAG 上切换到 LEAD,并且你对时间递减的描述,改变了“其他想要的值”的关系:

with data(country, store_id, order_date) as (
    select * from values
        ('DE', 990003975, '2023-01-24'::date),
        ('FR', 990004963, '2023-04-11'::date),
        ('FR', 990005204, '2023-06-15'::date),
        ('FR', 990005204, '2023-06-10'::date),
        ('FR', 990005204, '2023-06-07'::date),
        ('JP', 990005210, '2023-01-08'::date)
)
select 
    *
    ,lead(order_date,1,order_date) over (partition by store_id order by order_date desc) as lead_order_date
    ,datediff('days', lead_order_date, order_date) as days
from data
order by 2,3 desc;

给出:

enter image description here

可以压缩为:

select 
    *
    ,datediff(
        'days', 
        lead(order_date,1,order_date) over (partition by store_id order by order_date desc), 
        order_date
    ) as days
from data
order by 2,3 desc;

给出更清晰的答案:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.