0

複数の CTE があり、それらのいくつかから次の CTE に情報を取得したいと考えています。

だから、私はCTEの1つからこの情報を持っています:

PeriodID  StarDate
1         2006-01-01
2         2007-04-25
3         2008-08-16
4         2009-12-08
5         2011-04-017

そしてこれは他から:

RecordID  Date
100       2007-04-15
101       2008-05-21
102       2008-06-06
103       2008-07-01
104       2009-11-12

そして、私は次のもので示す必要があります:

RecordID  Date        PeriodID
100       2007-04-15  1
101       2008-05-21  2
102       2008-06-06  2
103       2008-07-01  2
104       2009-11-12  3

case/when ステートメントを使用して、レコードの日付が期間 1、2、3、4、または 5 にあるかどうかを定義できますが、状況によっては、最初の CTE から異なる数の期間が返される可能性があります。

上記のコンテキストでこれを行う方法はありますか?

4

1 に答える 1

1

次のように複数の CTE を定義し、他のテーブルと同様にそれらを選択して結合できます。

with cte1 as (select * ...),
cte2 as (select * ...)
    select 
        cte2.*, 
        periodid 
    from cte2
cross apply 
        (select top 1 * from cte1 where cte2.recorddate> cte1.startdate order by startdate desc) v
于 2012-10-22T10:34:14.347 に答える