You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL按连续日期partition by分组合并为时间段的实现方案

PostgreSQL 连续日期合并为时间段实现方案

实现思路

这是典型的连续值分组(岛屿问题),核心逻辑是利用连续日期与有序行号的差值固定的特性划分连续组:

  • 按员工岗位分组,对每个岗位的日期从小到大排序生成行号
  • 日期减去对应行号的天数,结果相同的即为同一连续时间段
  • 最后按岗位和分组标识聚合,即可得到每个时间段的起止日期和天数

实现代码

假设业务表名为employee_special_dates,可直接执行以下SQL:

SELECT 
    EmployeePosition,
    MIN(DeviationDays) AS DateStart,
    MAX(DeviationDays) AS DateEnd,
    COUNT(*) AS CountDays
FROM (
    SELECT 
        EmployeePosition,
        DeviationDays,
        -- 生成连续组标识:连续日期的该值相同
        DeviationDays - ROW_NUMBER() OVER (PARTITION BY EmployeePosition ORDER BY DeviationDays) AS date_group
    FROM employee_special_dates
) t
GROUP BY EmployeePosition, date_group
ORDER BY EmployeePosition, DateStart;

结果验证

执行上述SQL后返回结果和期望输出完全一致:

+----------------+------------+------------+-----------+
|employeeposition|datestart   |dateend     |countdays  |
+----------------+------------+------------+-----------+
|1925            |2021-09-06  |2021-09-06  |1          |
|1925            |2021-09-08  |2021-09-09  |2          |
|1925            |2021-09-21  |2021-09-23  |3          |
|1925            |2021-10-07  |2021-10-08  |2          |
+----------------+------------+------------+-----------+

内容的提问来源于stack exchange,提问作者Masta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:36:04