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

Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案(二)


Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案icon-default.png?t=O83Ahttps://blog.csdn.net/shijianduan1/article/details/133386281

某业务配置表,按配置的时间区间及组织层级取方案,形成报表展示出所有部门方案的取值;

例如,总公司配置20230101-20231231为方案3, 分公司配置 20230301-20230731  为方案2,部门配置20230601-20231031 为方案1,配置优先级为 部门> 分公司>总公司 ,即啥都没配则使用总公司默认值;

继上一篇拆分多区间后, 再次进行优化,目前有阶段性成果,先记录一下,等后续再有改进再发。

上一篇中 对日期区间的边界日期做了单独的拆分,没有将边界日期和其临界的 日期合并。

本篇中会对其进行优化,  单目前基础脚本只支持2个优先级,如多个优先级则需要 增加多次查询

数据源 L:优先级,2>3 ,  B1 开始日期, E1 结束日期

注意: 这里默认数据源的 日期区间不会重复

拆分后结果

以下是代码


WITH S AS(SELECT 3 AS L, '20230101' AS B1, '20230821' AS E1FROM DUALUNION ALLSELECT 3 AS L, '20230822' AS B1, '20231231' AS E1FROM DUALUNION ALLSELECT 2 AS L, '20230301' AS B1, '20230731' AS E1FROM DUALUNION ALLSELECT 2 AS L, '20230901' AS B1, '20230931' AS E1FROM DUAL UNION ALLSELECT 2 AS L, '20230401' AS B1, '20230631' AS E1FROM DUAL)  
,A AS(SELECT S.*, ROW_NUMBER() OVER(PARTITION BY L   ORDER BY B1) AS N FROM S)   --对优先级重新排序,确保优先级差1
,A2 AS(SELECT A.*, NVL(PRE.E1, 0) B_PRE, NVL(NEX.B1, 20991231) AS E_NEXFROM ALEFT JOIN A PRE ON A.N = PRE.N + 1 AND PRE.L = A.LLEFT JOIN A NEX ON A.N = NEX.N - 1 AND NEX.L = A.LWHERE A.L = 2 ) ,  --同级别的优先级,也是有边界的
A3 AS(SELECT * FROM A WHERE L = 3)
SELECT A3.L, GREATEST(A3.B1, A2.B_PRE)as B2,   A2.B1 as E2 FROM A2, A3 WHERE A3.B1 < A2.B1  AND A3.E1 > A2.B1
UNION ALL
SELECT A3.L, A2.E1 as B2, LEAST(A3.E1, A2.E_NEX) AS E2 FROM A2, A3 WHERE A3.B1 < A2.E1 AND A3.E1 > A2.E1
UNION ALL  select  L, B1, E1 from A2
order by L, B2;

http://www.lryc.cn/news/490401.html

相关文章:

  • leetcode刷题记录(四十二)——101. 对称二叉树
  • AutoDL安装docker问题
  • C++头文件大全(要是还有请帮忙)
  • 深度学习实战人脸识别
  • oracle排查长时间没提交的事务造成的阻塞案例
  • React第七节 组件三大属性之 refs 的用法注意事项
  • 工程企业需要什么样的物资管理系统?为什么需要物资管理系统?
  • 基于网页的大语言模型聊天机器人
  • 深入理解索引(一)
  • 动态规划子数组系列一>最长湍流子数组
  • MATLAB矩阵元素的修改及删除
  • 对 TypeScript 中函数如何更好的理解及使用?与 JavaScript 函数有哪些区别?
  • ubuntu搭建k8s环境详细教程
  • ubuntu安装Eclipse
  • C#里怎么样使用线程暂停?
  • 畅听FM 3.0.0 | 很有果味的电台软件,超多FM电台,支持播放本地音乐
  • 力扣面试经典 150(上)
  • 鸿蒙开发-音视频
  • 第一个autogen与docker项目
  • 第三十四篇 MobileNetV1、V2、V3模型解析
  • Python学习——字符串操作方法
  • 力扣—15.三数之和
  • 容器安全检测和渗透测试工具
  • sqlite3自动删除数据的两种设置方式记录
  • Hive分桶超详细!!!
  • 【深度学习之回归预测篇】 深度极限学习机DELM多特征回归拟合预测(Matlab源代码)
  • Android mk/bp构建工具介绍
  • 数据源及分层开发
  • 气膜场馆照明设计:科技与环保的完美结合—轻空间
  • 并行IO接口8255