【发布时间】: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