SQL通过时间戳间隔获取数据

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

我有一个表格,根据日期列出了工作状态。

例如:

日期从 日期 状态
2023-01-01 2023-01-02 进行中
2023-01-02 2023-01-03 进行中
2023-01-03 2023-01-04 没有电
2023-01-04 2023-01-05 进行中

我想将该表总结如下:

日期从 日期 状态
2023-01-01 2023-01-03 进行中
2023-01-03 2023-01-04 没有电
2023-01-04 2023-01-05 进行中

我尝试在列上使用最大值/最小值,但我得到的结果如下:

日期从 日期 状态
2023-01-01 2023-01-05 进行中
2023-01-03 2023-01-04 没有电

这是不正确的。

有人知道如何编写查询来获取结果吗?

sql postgresql logic
1个回答
0
投票

这是变相的差距和孤岛问题。 我们可以在这里尝试使用行数差异法:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY date_from) rn1,
              ROW_NUMBER() OVER (PARTITION BY Status ORDER BY date_from) rn2
    FROM yourTable
)

SELECT
    MIN(date_from) AS date_from,
    MAX(date_to) AS date_to,
    Status
FROM cte
GROUP BY
    Status,
    (rn1 - rn2);
© www.soinside.com 2019 - 2024. All rights reserved.