【问题标题】:Oracle SQL Cursor for loop to check between the START_DATE and END_DATE and assign a trip valueOracle SQL 游标 for 循环检查 START_DATE 和 END_DATE 之间并分配行程值
【发布时间】:2012-08-27 16:24:41
【问题描述】:

我正在使用 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

提前感谢您的帮助。 亚历克斯

【问题讨论】:

    标签: sql date for-loop cursor oracle11g


    【解决方案1】:

    根据您拥有的数据,您只需要枚举日期对。你也可以使用 dense_rank() 来做到这一点:

    select t.*,
           dense_rank() over (order by start_date, end_date) as trip
    from t
    

    对于您的数据,这将改变排序。如果你想保持大致相同的顺序,那么先聚合,得到最小行id,然后做一个dense_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
    

    【讨论】:

    • 感谢您对代码的帮助。看起来它可以工作,但查看结果我还有另外两列与之冲突。这是我的 sql SELECT CRUISE, PERMIT, START_DATE, END_DATE, TRIP AS FROM (SELECT START_DATE, END_DATE, ROW_NUMBER() OVER (PARTITION BY ROWID ORDER BY END_DATE) AS TRIP FROM (SELECT START_DATE, END_DATE, MIN(ROWID) AS ROWID FROM T group by START_DATE, END_DATE ) a ) B JOIN TABLE8 T ON B.START_DATE = T.START_DATE AND B.END_DATE = T.END_DATE;
    • @SeattleGray 。 . .我认为您只需要在列名之前使用别名: b.Cruise, b.Permit 。 . .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 2023-03-12
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    相关资源
    最近更新 更多