0

次のエラーが発生します。

ORA-30483: window  functions are not allowed here
30483. 00000 -  "window  functions are not allowed here"

時間の経過に伴う BOOK_NO および WALK_NO 属性の変化の水平ビューを構築しようとしています。

合理的なアプローチは、有効期限の日付をランク付けし、その値で book_no||walk_no 属性をデコードすることだと思いました....しかし、ここからどこに行くべきかわかりません!

以下のSQL:

Select METER_PIT_REF 
,MAX(DECODE( RANK() OVER (PARTITION BY METER_PIT_REF ORDER BY EFFECTIVE_TO DESC),1,BOOK_NO||WALK_NO) )
,MAX(DECODE( RANK() OVER (PARTITION BY METER_PIT_REF ORDER BY EFFECTIVE_TO DESC),2,BOOK_NO||WALK_NO) )
,MAX DECODE( RANK() OVER (PARTITION BY METER_PIT_REF ORDER BY EFFECTIVE_TO DESC),3,BOOK_NO||WALK_NO) )
FROM BW_PIT_BOOKWALK_BRIDGE
WHERE BOOK_NO = 'M04'
GROUP BY METER_PIT_REF

どんなアドバイスも大歓迎です!

4

1 に答える 1

2

サブクエリを使用します。

Select METER_PIT_REF,
       MAX(CASE WHEN r = 1 THEN BOOK_NO||WALK_NO END),
       MAX(CASE WHEN r = 2 THEN BOOK_NO||WALK_NO END),
       MAX(CASE WHEN r = 3 THEN BOOK_NO||WALK_NO END)
FROM (SELECT b.*,
             RANK() OVER (PARTITION BY METER_PIT_REF ORDER BY EFFECTIVE_TO DESC) as r
      FROM BW_PIT_BOOKWALK_BRIDGE
     ) b
WHERE BOOK_NO = 'M04'
GROUP BY METER_PIT_REF;

も交換しDECODE()ましたCASE。ANSI 標準と同等です。

于 2015-01-24T18:41:19.060 に答える