weixin_42880934 2022-04-07 15:16 采纳率: 50%
浏览 35
已结题

请教下,像这个发生日期匹配最近的交易日的话语句逻辑怎么写啊

img

比如20220101 20220102 20220103标志是2为非交易日;这三个日期的交易日是标志为1离它们最近的20220104。怎么把所有发生日期的交易日找到。

  • 写回答

2条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-04-07 16:34
    关注

    这个表看上去是个日历表,所以假定发生日期中间没有日期缺失

    with t(发生日期,是否交易日期) asselect date'2022-01-01',2 from dual union all
    select date'2022-01-02',2 from dual union all
    select date'2022-01-03',2 from dual union all
    select date'2022-01-04',1 from dual union all
    select date'2022-01-05',1 from dual union all
    select date'2022-01-06',1 from dual union all
    select date'2022-01-07',1 from dual union all
    select date'2022-01-08',2 from dual union all
    select date'2022-01-09',2 from dual union all
    select date'2022-01-10',1 from dual 
    )
    select t1.发生日期,
           case
             when 是否交易日期 = 1 then
              发生日期
             else
              max(发生日期) over(partition by d) + 1
           end 交易日期
      from (select t.*,
                   sum(case 是否交易日期
                         when 2 then
                          0
                         else
                          1
                       end) over(order by 发生日期) d
              from t) t1
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月15日
  • 已采纳回答 4月7日
  • 创建了问题 4月7日

悬赏问题

  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数