我有一组(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工作 有什么建议?
答案 0 :(得分:0)
您可以使用1 / months_between()或SOME_HUGE_VALUE-months_between()
无论如何,您可能希望查看分析函数,看起来您遇到了分析函数的问题。