У меня есть набор (employeeId, planId, coverageMonth, contractId)
ключей. Иногда существует два или более (contractId) для каждого (employeeId, planId, coverageMonth)
, т.е.
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'
Я получил месяц с дублирующимися контрактными идентификаторами за один месяц через
...
group by employeeId, planId, coverageMonth
having count(distinct contractId) > 1
Я также расширил эти ключи до (employeeId, planId, coverageMonth, contractId)
через EXISTS
(или IN
).
Я пытаюсь найти лучший contractId для каждой записи месяца с дубликатами.
Я хочу найти все месяцы вокруг дубликата контрактного месяца и дать каждому из них балл (чем ближе месяц, тем выше балл, чем он дальше, тем ниже балл).
Я хочу суммировать баллы, и наибольшее количество баллов решает, какой ContractId будет использоваться в дублированном месяце.
Проблема в том, что months_between()
возвращает маленькие значения для ближайших месяцев и большие значения
на долгие месяцы. Мне нужно обратное этому.
Есть ли способ установить оценки для других записей за месяц, чтобы, если месяц был ближе, он имел
лучший результат? Таким образом, когда я агрегирую / суммирую баллы, наилучший балл (самый близкий и самый большой скопление месяцев) получается для определения окончательного идентификатора договора для
месяц с дубликатами контрактов.
Я работаю в SQL / Oracle.
Какие-либо предложения?