nickyqian 2023-12-20 11:08 采纳率: 62.5%
浏览 18
已结题

两表包含历史数据合并处理

我有两张表,一张是贷款台账表LOAN,包含了每一笔贷款余额变化的起始日期、余额等信息;一张表是贷款分类表FIV,包含了每一笔贷款分类变化的起始日期、分类等信息;如下图所示:

表LOAN
开始日期 结束日期 账号 余额
BEGIN_DT END_DT LOAN_NO LOAN_BAL
20231002 20231008 A0001 100000
20231008 99991231 A0001 80000
20231203 99991231 A0002 50000

表FIV
开始日期 结束日期 账号 分类
BEGIN_DT END_DT LOAN_NO FIV_CLS
20231002 20231005 A0001 1
20231005 20231009 A0001 2
20231009 99991231 A0001 3
20231203 20231210 A0002 2
20231210 99991231 A0002 1

我想实现查询某一笔贷款,
如A0001时,将余额变化和分类变化的情况一同展现,如下图:
开始日期 结束日期 账号 余额 分类
20231002 20231005 A0001 100000 1
20231005 20231008 A0001 100000 2
20231008 20231009 A0001 80000 2
20231009 99991231 A0001 80000 3
如A0002时,将余额变化和分类变化的情况一同展现,如下图:
开始日期 结束日期 账号 余额 分类
20231203 20231210 A0002 50000 2
20231210 99991231 A0002 50000 1

这个问题关键在于贷款发生余额变化的日期是与贷款分类发生变化的日期不同,会有交叉。
请问在SQL中,如何实现?谢谢!

  • 写回答

14条回答 默认 最新

  • 张朋举Biz 2023-12-20 16:31
    关注

    img

    -- 开始日期 结束日期 账号 余额 分类
    select case
               when t1.begin_dt >= t2.begin_dt then t1.begin_dt
               else t2.begin_dt end 开始日期
         , case
               when t1.end_dt <= t2.end_dt then t1.end_dt
               else t2.end_dt end   结束日期
         , t1.loan_no               账号
         , t2.loan_bal              余额
         , t1.fiv_cls               分类
    from fiv t1
             join loan t2 on t1.loan_no = t2.loan_no
        and (t1.begin_dt between t2.begin_dt and t2.end_dt
            or t1.end_dt between t2.begin_dt and t2.end_dt)
    where t1.loan_no = 'A0001'
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(13条)

报告相同问题?

问题事件

  • 系统已结题 1月3日
  • 已采纳回答 12月26日
  • 修改了问题 12月20日
  • 创建了问题 12月20日

悬赏问题

  • ¥15 C++ 菜单窗口独立出来,可以随意移动放大缩小。
  • ¥15 java代码写在记事本上后在cmd上运行时无报错但又没生成文件
  • ¥15 关于#python#的问题:在跑ldsc数据整理的时候一直抱这种错误,要么--out识别不了参数,要么--merge-alleles识别不了参数(操作系统-linux)
  • ¥15 PPOCRLabel
  • ¥15 网友们我该怎么办啊,急
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 目标跟踪,计算机视觉
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?