多个日期之间的差异

Difference between multiple dates

我在一个包含多个供应商的多个订单的数据库中工作。现在我想知道订单 1 和订单 2、订单 2 和订单 3、订单 3 和订单 4 之间的天数差异等等。对于每个供应商自己。我需要它根据订单之间的天数为每个供应商生成标准偏差。

希望有人能帮忙..

您描述的是 lag() 聚合:

select supplier,
       stddev(orderdate - prev_orderdate) as std_orderdate
from (select t.*,
             lag(orderdate) over (partition by supplier order by orderdate) as prev_orderdate
      from t
     ) t
group by supplier;

您通常会使用 window 函数 lag() 和日期算法。

假设 table orders 的数据结构如下:

order_id int primary key
supplier_id int
order_date date

你会去:

select 
    i.*,
    order_date 
        - lag(order_date) over(partition by supplier_id order by order_date) date_diff
from orders o

这会为您提供每个订单与同一供应商的上一个订单的天数差异(如果这是供应商的第一个订单,则为 null)。

然后您可以使用聚合计算标准偏差:

select supplier_id, stddev(date_diff) 
from (
    select 
        o.*,
        order_date 
            - lag(order_date) over(partition by supplier_id order by order_date) date_diff
    from orders o
) x
group by supplier_id