如何使用大查询 SQL 查找下一组值

问题描述 投票:0回答:1

我有一张包含以下值的表格。

Order Id    Order_start_date
O1          9/10/2022
O1          9/10/2022
O1          9/12/2023
O1          9/12/2023
O1          9/14/2023
O1          9/14/2023

我想获取 next_order_start_dt 作为下一组开始日期。 所以我期待的结果是

Order_id    Order_start_date    Next_Order_start_date
O1          9/10/2022           9/12/2023
O1          9/10/2022           9/12/2023
O1          9/12/2023           9/14/2023
O1          9/12/2023           9/14/2023
O1          9/14/2023           Null
O1          9/14/2023           Null

这是我的表 SQL

WITH  ORDER_DETAIL AS 
(
    SELECT 'O1' AS ORD_ID , DATE('2022-09-10') AS ORDER_START_DT
    UNION ALL 
    SELECT 'O1' AS ORD_ID , DATE('2022-09-10') AS ORDER_START_DT
    UNION ALL 
    SELECT 'O1' AS ORD_ID , DATE('2022-09-12')  AS ORDER_START_DT
    UNION ALL 
    SELECT 'O1' AS ORD_ID , DATE('2022-09-12')  AS ORDER_START_DT
    UNION ALL 
    SELECT 'O1' AS ORD_ID , DATE('2022-09-14') AS ORDER_START_DT
    UNION ALL 
    SELECT 'O1' AS ORD_ID , DATE('2022-09-14') AS ORDER_START_DT
)
SELECT ORD_ID, ORDER_START_DT
FROM ORDER_DETAIL

如何使用大查询 SQL 获取 Next_order_start_dt。

sql google-bigquery snowflake-cloud-data-platform window-functions
1个回答
0
投票

你可以考虑以下。

SELECT ORD_ID, ORDER_START_DT,
       FIRST_VALUE(ORDER_START_DT) OVER w1 AS Next_Order_start_date
  FROM (
    SELECT *, DENSE_RANK() OVER w0 AS rnk
      FROM ORDER_DETAIL
    WINDOW w0 AS (PARTITION BY ORD_ID ORDER BY ORDER_START_DT)
  ) WINDOW w1 AS (PARTITION BY ORD_ID ORDER BY rnk RANGE BETWEEN 1 FOLLOWING AND 1 FOLLOWING);

查询结果

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