递归CTE到Oracle 10g R2

时间:2015-01-24 20:03:49

标签: sql-server oracle10g

我在SQL Server 2008中使用了以下代码,但我现在需要在Oracle 10g R2中实现它,它似乎不支持递归CTE。基本上,它将记录分组为每个PID的事件,当旧记录的END_DATE在最新记录的START_DATE的90天内时,两个记录被认为是同一事件(尽管会有更多条件)在最后的实施中)。

这是SQL小提琴:http://sqlfiddle.com/#!3/1840b/3

    WITH C AS
    (
        SELECT PID, START_DATE, END_DATE AS EVENT_START, 1 AS EVENT, RN, END_DATE
        FROM SampleTable
        WHERE RN=1

        UNION ALL

        SELECT C.PID, R.START_DATE, 
        CASE WHEN R.START_DATE < DATEADD(DAY, -90, C.EVENT_START) THEN R.END_DATE ELSE C.EVENT_START END,
        CASE WHEN R.START_DATE < DATEADD(DAY, -90, C.EVENT_START) THEN C.EVENT + 1 ELSE C.EVENT END,
        R.RN,
        R.END_DATE
        FROM C INNER JOIN SampleTable R ON C.PID = R.PID and C.RN=R.RN-1
    )

任何解决方案都应该没问题,因为它会一次针对一个小的(200,000条记录)数据集运行,尽管我有兴趣看看是否/如何在SQL中使用START WITH ... CONNECT完成此操作BY

0 个答案:

没有答案