我有一张包含以下值的表格。
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。
你可以考虑以下。
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);
查询结果