在一张表中有数据日期,贷款账号,本金逾期日期,利息逾期日期,五级分类,5个字段。我想根据贷款账号分组,数据日期按从小到大排列查询出对于每一个贷款账号,当本金逾期日期,利息逾期日期,五级分类三个字段中,只要其中有一个字段与上一个数据日期的值不同,就返回这两个数据日期的两行。在sql中应该如何实现?
2条回答 默认 最新
- mengduoduo_ 2023-12-26 14:34关注
可以使用MySQL的窗口函数来实现
使用LAG函数获取上一个数据日期的值。
使用CASE语句判断本金逾期日期,利息逾期日期,五级分类三个字段是否与上一个数据日期的值相同。如果有任意一个不同,则返回1,否则返回0。
使用SUM函数计算每个贷款账号中不同的记录数。
最后在外层查询中过滤掉不需要的记录。SELECT data_date, loan_account, principal_due_date, interest_due_date, five_level_classification FROM ( SELECT data_date, loan_account, principal_due_date, interest_due_date, five_level_classification, SUM(flag) OVER (PARTITION BY loan_account ORDER BY data_date) AS diff_count FROM ( SELECT data_date, loan_account, principal_due_date, interest_due_date, five_level_classification, CASE WHEN principal_due_date != LAG(principal_due_date, 1) OVER (PARTITION BY loan_account ORDER BY data_date) THEN 1 WHEN interest_due_date != LAG(interest_due_date, 1) OVER (PARTITION BY loan_account ORDER BY data_date) THEN 1 WHEN five_level_classification != LAG(five_level_classification, 1) OVER (PARTITION BY loan_account ORDER BY data_date) THEN 1 ELSE 0 END AS flag FROM table_name ) t ) t2 WHERE diff_count > 0 ORDER BY loan_account, data_date
查询语句会返回每个贷款账号中变化的记录。需要注意的是,如果一个贷款账号在两个数据日期中的本金逾期日期,利息逾期日期,五级分类三个字段都相同,则不会被返回
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 C++ 菜单窗口独立出来,可以随意移动放大缩小。
- ¥15 java代码写在记事本上后在cmd上运行时无报错但又没生成文件
- ¥15 关于#python#的问题:在跑ldsc数据整理的时候一直抱这种错误,要么--out识别不了参数,要么--merge-alleles识别不了参数(操作系统-linux)
- ¥15 PPOCRLabel
- ¥15 网友们我该怎么办啊,急
- ¥15 混合键合键合机对准标识
- ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
- ¥15 目标跟踪,计算机视觉
- ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
- ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?