当前位置: 首页 > news >正文

不连续数据区间天数累计sql

计算不连续数据区间天数并且剔除重复天数

create table loan_data(loan_no varchar(10),cust_no varchar(10),start_date date,end_date date
)INSERT INTO loan_data VALUES ('LN001', 'CUST001', '2025-01-04', '2025-01-08');
INSERT INTO loan_data VALUES ('LN002', 'CUST001', '2025-01-06', '2025-01-09');
INSERT INTO loan_data VALUES ('LN003', 'CUST001', '2025-01-09', '2025-01-10');
INSERT INTO loan_data VALUES ('LN004', 'CUST001', '2025-01-11', '2025-01-12');
INSERT INTO loan_data VALUES ('LN005', 'CUST001', '2025-01-14', '2025-01-16');
INSERT INTO loan_data VALUES ('LN005', 'CUST001', '2025-01-19', '2025-01-20');select * from loan_data;with date_with_gaps AS (SELECT cust_no,start_date,end_date,LAG(end_date) OVER (PARTITION BY cust_no ORDER BY start_date) AS prev_date,CASE WHEN start_date <= LAG(end_date) OVER (PARTITION BY cust_no ORDER BY start_date)THEN 0 --连续天数ELSE 1 --不连续开始新的区间END AS is_new_periodFROM loan_data
),
-- 计算连续区间分组
date_groups AS (SELECT cust_no,start_date,end_date,SUM(is_new_period) OVER (PARTITION BY cust_no ORDER BY start_date) AS period_groupFROM date_with_gaps
),
-- 计算每个连续区间的统计信息
period_stats AS (SELECT cust_no,period_group,MIN(start_date) AS period_start,MAX(end_date) AS period_endFROM date_groupsGROUP BY cust_no, period_grouporder by period_group
)
-- 最终结果
SELECT cust_no,SUM(period_end-period_start+1) AS total_unique_days,MIN(period_start) AS overall_start_date,MAX(period_end) AS overall_end_date,-- 列出所有连续区间jsonb_agg(jsonb_build_object('period', period_start || '~' || period_end,'days', period_end-period_start+1)ORDER BY period_start) AS continuous_periods_detail
FROM period_stats
GROUP BY cust_no;--结果接
CUST001	14	2025-01-04	2025-01-20
---json_agg
[{"days": 7, "period": "2025-01-04~2025-01-10"}, 
{"days": 2, "period": "2025-01-11~2025-01-12"},
{"days": 3, "period": "2025-01-14~2025-01-16"}, 
{"days": 2, "period": "2025-01-19~2025-01-20"}]

相关文章:

  • 手机投屏到电视方法
  • MongoDB导出和导入数据
  • 【大疆dji】边缘计算模块在大疆机场中的位置
  • Datawhale AI春训营】AI + 新能源(发电功率预测)Task1
  • nohup的使用
  • 2025年第16届蓝桥杯嵌入式竞赛学习笔记(十四):RTC实时时钟
  • ESB —— 企业集成架构的基石:功能、架构与应用全解析
  • 详细解释浏览器是如何渲染页面的?
  • 国网B接口协议图像数据上报通知接口流程详解以及上报失败原因(电网B接口)
  • Docker 网络详解:从 docker0 网桥到网络命名空间
  • 深入Docker核心技术:从Namespace到容器逃逸防御
  • OpenCV 04.19 练习
  • Python带有else子句的循环语句
  • 【漫话机器学习系列】210.标准化(Standardization)
  • docker 大模型
  • Cribl 优化EC2 ip-host-region 数据
  • Grouped Query Attention (GQA) PyTorch实现
  • 关于学习STM32的C语言的知识
  • matlab 处理海洋数据并画图的工具包--ocean_data_tools
  • 基于模板匹配的信用卡号码识别系统
  • 现货黄金价格站上3400美元,今年迄今累涨逾29%
  • 习近平向加蓬当选总统恩圭马致贺电
  • 运油-20亮相中埃空军联训
  • 中国房地产报:以改促治实现楼市多难并解
  • 科普|军团菌肺炎:春末夏初的隐形健康威胁
  • 考艾的森林与雾气中,艺术在生长