[英]Oracle SQL Cursor for loop to check between the START_DATE and END_DATE and assign a trip value
我正在使用SQL Developer for Oracle 11g。
我需要能够遍历一组日期,检查上方或下方的END_DATE是否比下一个END_DATE为=或<或>,且START_DATE不同。
然后,分配一个与其=相同的旅程编号,或分配一个新的旅程编号,然后开始一个新旅程,然后再次检查下一组日期,以查看其=或<或>是否大于当前日期。
我想为了做到这一点,我需要使用pl / sql游标进行循环..我试图弄清楚它,但对我来说意义不大。
例如,我希望最终结果是这样的。
ROWID START_DATE END_DATE TRIP
1 30-DEC-11 1-Jan-12 1
2 31-DEC-11 2-Jan-12 2
3 31-DEC-11 2-Jan-12 2
4 01-JAN-12 3-Jan-12 3
5 03-JAN-12 4-Jan-12 4
6 01-JAN-12 1-Jan-12 5
7 02-JAN-12 4-Jan-12 6
在此先感谢您的帮助。 亚历克斯
根据您拥有的数据,您只想枚举日期对。 您也可以使用density_rank()执行此操作:
select t.*,
dense_rank() over (order by start_date, end_date) as trip
from t
对于您的数据,这将更改顺序。 如果要保持大致相同的顺序,请先进行汇总,获取最小行ID,然后执行density_rank()或row_number(),然后重新加入原始数据:
select t.*, trip
from (select start_date, end_date, row_number() over (partition by row_id) as trip
from (select start_date, end_date, min(rowid) as rowid
from t
group by start_date, end_date
) a
) b join
t
on b.start_date = t.start_date and b.end_date = t.end_date
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.