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

不连续数据区间天数累计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"}]
http://www.xdnf.cn/news/416.html

相关文章:

  • Python制作简易PDF查看工具PDFViewerV1.0显示优化
  • HTML5+CSS3小实例:CSS立方体
  • 【Lua语言】Lua语言快速入门
  • redis和lua为什么能实现事务
  • 在STM32的定时器外设中,选择使用哪个外部时钟配置函数
  • 猫咪如厕检测与分类识别系统系列【十二】猫咪进出事件逻辑及日志优化
  • 【sylar-webserver】8 HOOK模块
  • Linux-进度条小程序
  • 【笔记】网路安全管理-实操
  • FiftyOne 管理数据
  • React-useRef
  • 实现Azure Data Factory安全地请求企业内部API返回数据
  • 图灵奖得主LeCun:DeepSeek开源在产品层是一种竞争,但在基础方法层更像是一种合作;新一代AI将情感化
  • Ubuntu20.04下Docker方案实现多平台SDK编译
  • 国网B接口协议图像数据上报通知接口流程详解以及上报失败原因(电网B接口)
  • 【LeetCode 热题 100】双指针 系列
  • 【leetcode100】分割等和子集
  • systemctl管理指令
  • 为什么信号完整性对于高速连接器设计至关重要?
  • 计算机三级:信息安全基础技术与原理(2.1密码技术简单梳理)
  • 上海市计算机学会竞赛平台2023年7月月赛丙组题目解题报告
  • asp.net core webapi+efcore
  • SQL系列:常用函数
  • ProfiNet转DeviceNet边缘计算网关多品牌集成实践:污水处理厂设备网络融合全流程解析
  • leetcode 674. Longest Continuous Increasing Subsequence
  • 包含物体obj与相机camera的 代数几何代码解释
  • Flutter 弹窗队列管理:实现一个线程安全的通用弹窗队列系统
  • 学习笔记十七——Rust 支持面向对象编程吗?
  • Yue生成中文歌词
  • Mybatis