我有如下数据。在这个我需要找到他们月份的差异应该> = 6的行。逻辑应该是,我们需要从第一行进行比较,直到我们得到月份差异为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
以下是我在 oracle 中使用解析函数尝试的逻辑。
select lectureid,
studentid,
floor(months_between(fromdate,
lag(fromdate) over (partition by
lectureid,
studentid
order by fromdate
)
)
) monthdiff
from above_table;
由于滞后函数的默认偏移量为 1,因此它只检查之前的行,因为我上面提到的逻辑在这里无法正常工作,因为需要根据新匹配的行动态检查它们之前的行。所以这里的 o/p 如下所示。
由于这个原因,用星号突出显示的行出错了,因为它只与它的前一行进行比较。
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
这里的任何帮助将不胜感激!!!