Функция Oracle для подсчета интервалов дат, обратных к месяцам - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть набор (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.
Какие-либо предложения?

1 Ответ

0 голосов
/ 04 ноября 2011

Вы можете использовать 1 / months_between () или SOME_HUGE_VALUE-months_between ()

В любом случае, вы можете захотеть взглянуть на аналитические функции, похоже, у вас есть проблема, для которой созданы аналитические функции.

...