用于评分日期间隔的Oracle函数,与months_between相反

时间:2011-11-03 19:46:04

标签: sql oracle statistics intervals

我有一组(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'  

我已经通过

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

我还通过(employeeId, planId, coverageMonth, contractId)(或EXISTS)将这些密钥扩展到IN

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

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

我想总结分数,最高分决定哪个contractId将在重复的月份中使用。

问题是months_between()会返回近月和较大值的小值 好几个月。我需要反过来。

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

我在SQL / Oracle工作 有什么建议?

1 个答案:

答案 0 :(得分:0)

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

无论如何,您可能希望查看分析函数,看起来您遇到了分析函数的问题。