簡體   English   中英

Oracle SQL Cursor for循環,用於在START_DATE和END_DATE之間檢查並分配行程值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM