У меня есть данные, как показано ниже. В этом мне нужно найти строки, где diff в их месяцах должен быть> = 6. Логика должна быть, нам нужно сравнить с первой строки, пока мы не получим строку, где diff в месяцах - 6, тогда нужно следовать той же логике из недавно согласованного ряда, и он продолжается.Нахождение разницы в месяцах с использованием аналитической функции в оракуле
Я добавляю ниже свои данные образца и ожидаемый результат.
Fromdate LectureiD StudentID Diff Months Expected
1-Oct-13 1102 55586 null
15-Oct-13 1102 55586 0
15-Oct-13 1102 55586 0
4-Apr-14 1102 55586 6
19-Dec-14 1102 55586 8
27-Dec-14 1102 55586 0
14-Jan-15 1102 55586 0
14-Jan-15 1102 55586 0
29-Sep-15 1102 55586 8
1-Oct-13 1102 55557 null
15-Oct-13 1102 55557 0
15-Oct-13 1102 55557 0
4-Apr-14 1102 55557 6
19-Dec-14 1102 55557 8
Ниже приведена логика, которую я попытался использовать аналитическую функцию в оракуле.
select lectureid,
studentid,
floor(months_between(fromdate,
lag(fromdate) over (partition by
lectureid,
studentid
order by fromdate
)
)
) monthdiff
from above_table;
Поскольку функция задержки будет по умолчанию смещение 1 он просто проверяет строку только до этого из-за того, что логика я уже говорил выше, не работает должным образом здесь, так что нужно сверяется их предыдущих строк динамически на основе новой согласованной строки. Таким образом, я получаю здесь, как показано ниже.
Строки, выделенные звездочкой, становятся неправильными из-за этого, поскольку они сравниваются только с его непосредственной предшествующей строкой.
Fromdate LectureiD StudentID Diff Month
1-Oct-13 1102 55586 null
15-Oct-13 1102 55586 0
15-Oct-13 1102 55586 0
*4-Apr-14 1102 55586 5*
19-Dec-14 1102 55586 8
27-Dec-14 1102 55586 0
14-Jan-15 1102 55586 0
14-Jan-15 1102 55586 0
29-Sep-15 1102 55586 8
1-Oct-13 1102 55557 null
15-Oct-13 1102 55557 0
15-Oct-13 1102 55557 0
*4-Apr-14 1102 55557 5*
19-Dec-14 1102 55557 8
Любая помощь здесь была бы принята с благодарностью !!!
Я упомянул правильный набор данных выше .. Я только что упомянул последний набор данных, чтобы выделить, где я ошибаюсь ..Thx – arunb2w
Извините, что это было не совсем правильно. Я считаю. Последний столбец не является идентификатором студента, column (diffmonth) – arunb2w
Для этой строки '* 4-Apr-14 1102 55586 5 *' student 1102, что было бы результатом, если бы первая дата была также «15-Oct-13» –