Sql Oracle函数,用于计算日期间隔,月与月之间的倒数

Sql Oracle函数,用于计算日期间隔,月与月之间的倒数,sql,oracle,statistics,intervals,Sql,Oracle,Statistics,Intervals,我有一套员工ID,planId,coverageMonth,收缩键。有时,每个员工ID、planId、Coverage每月有两个或多个合同,即 我在一个月内通过 ... group by employeeId, planId, coverageMonth having count(distinct contractId) > 1 我还将这些键扩展到employeeId、planId、Coverage Month、Constract via EXISTS或IN 我正试图为每个月

我有一套员工ID,planId,coverageMonth,收缩键。有时,每个员工ID、planId、Coverage每月有两个或多个合同,即

我在一个月内通过

...  
group by employeeId, planId, coverageMonth  
having count(distinct contractId) > 1  
我还将这些键扩展到employeeId、planId、Coverage Month、Constract via EXISTS或IN

我正试图为每个月的重复记录找到最好的合同

我想找出重复合同月份周围的所有月份,给每个月份打a分,越近的月份得分越高,越远的月份得分越低

我想把分数加起来,最高的分数决定了在重复的月份使用哪一个contracd

问题是,月与月之间的间隔返回近月的小值和大值 好几个月了。我需要与此相反的结果

有没有一种方法可以在其他月份的记录上设置分数,这样,如果一个月比较近,它就有了分数 更好的分数?这样,当我对分数进行汇总/求和时,最接近的最佳分数和最大的月份数就可以确定最终的收缩值 有重复收缩的月份

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

您可以使用1/months\u-between或一些价值巨大的\u-months\u-between


无论如何,您可能需要研究分析函数,因为分析函数似乎是为解决问题而设计的。

越接近月份,分数越高,离重复月份越远,分数越低。它可以是一个整数,也可以是一个由有限的十进制表示形式给出的有理数。你可以使用一个任意常数,你的月数介于之间,比如100个月。这会使越近的月份返回的值越高。你所说的所有月份是什么意思?你的例子是五月和七月吗?或者合同1的7月至11月和合同0的1月至5月?@Jens-Jan、Feb、Mar、Apr、May会有个人分数,而7月、八月、九月、十月、11月也会有个人分数。所有月份。@Lost如果介于之间的月份数超过100怎么办?我会遇到1/months的麻烦,因为我需要越来越高的刻度。小数点后的数字越多,且值越大,在后面的聚合步骤中,我可能会遇到麻烦,因为我可能会跨越求和字段的精度边界。我将首先在整个数据集中找到几个月的上限max into变量,然后使用它来设置上限。谢谢,我已经松开了:我使用了SUMTRUNC 1/POWER2,absmonthween.coverageMonth,p.coverageMonth-1*10000000,其中d是包含我们需要分数的键的表,p是在公共复合键上加入的表,其中d.coverageMonth!=p、 覆盖每月
...  
group by employeeId, planId, coverageMonth  
having count(distinct contractId) > 1