【问题标题】:Oracle function for scoring date intervals, inverse of months_between用于评分日期间隔的 Oracle 函数,与months_between 成反比
【发布时间】:2011-12-21 12:05:30
【问题描述】:

我有一组(employeeId, planId, coverageMonth, contractId) 键。有时每个(employeeId, planId, coverageMonth) 有两个或多个(contractId),即

1,1,'1-Jan-2011','contract0'  
1,1,'1-Feb-2011','contract0'  
1,1,'1-Mar-2011','contract0'  
1,1,'1-Apr-2011','contract0'  
1,1,'1-May-2011','contract0'  

1,1,'1-Jun-2011','contract0'  
1,1,'1-Jun-2011','contract1'  

1,1,'1-Jul-2011','contract1'  
1,1,'1-Aug-2011','contract1'  
1,1,'1-Sep-2011','contract1'  
1,1,'1-Oct-2011','contract1'  
1,1,'1-Nov-2011','contract1'  

我已经通过

在一个月内获得了重复合同 ID 的月份
...  
group by employeeId, planId, coverageMonth  
having count(distinct contractId) > 1  

我还通过EXISTS(或IN)将这些键扩展为(employeeId, planId, coverageMonth, contractId)

我正在尝试为每个重复的月份记录找到最佳contractId。

我想找到重复合约月份周围的所有月份,并给每个月份打分(月份越近,分数越高,越远,分数越低)。

我想对分数求和,最高分数决定在重复月份中使用哪个 contractId。

问题是 months_between() 返回近几个月的小值和大值
几个月。我需要这个的反面。

有没有办法在其他月份记录上设置分数,这样如果一个月更接近,它就有
更好的分数?这样,当我对分数进行汇总/求和时,最好的分数(最接近和最大的月份)就可以确定
具有重复合同 ID 的月份。

我正在使用 SQL / Oracle。
有什么建议?

【问题讨论】:

  • 离重复月份越近,得分越高,离重复月份越远,得分越低。它可以是整数分数,也可以是有限十进制表示形式的有理数。
  • 您可以在您的months_between() 中使用任意常量,例如(100 - months_between())。这将使更近的月份返回更高的价值。
  • “所有月份”是什么意思?在你的例子中可能和七月?还是合同 1 为 7 月至 11 月,合同 0 为 1 月至 5 月?
  • @Jens 一月、二月、三月、四月、五月会有个人分数,七月、八月、九月、十月、十一月也会有个人分数。整个月。
  • @Lost 如果months_between的数量超过100怎么办?

标签: sql oracle statistics intervals


【解决方案1】:

您可以使用 1/months_between() 或 SOME_HUGE_VALUE-months_between()

无论如何,您可能想要研究分析函数,看起来您遇到了分析函数的问题。

【讨论】:

  • 我会遇到 1/months_between() 的麻烦,因为我需要越来越高的规模。 (小数点后的位数更多)使用 HUGE_VALUE,我会在后面的聚合步骤中遇到麻烦,我可能会越过 SUM 字段的精度边界。
  • 我会首先将上限 max() 找到为months_between (跨整个数据集)的变量,然后使用它来设置上限。谢谢,我搞砸了:)
  • 我使用了 SUM(TRUNC(( 1 / POWER(2,ABS(MONTHS_BETWEEN(d.coverageMonth,p.coverageMonth))-1))*10000000)) 其中 d 是包含键的表我们需要分数,p 是在 d.coverageMonth != p.coverageMonth 的公共复合键上加入的表
猜你喜欢
  • 1970-01-01
  • 2021-02-25
  • 2022-11-03
  • 2012-01-01
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多