1

TD は初めてで、以下のクエリに関するヘルプが必要です。

from 句が次のようなクエリがあります。

`*sel *
FROM 
V_ACOR  ACOR,
V_ORTR ORTR,
V_MSAC MSAC,
V_MSRC MSRC,
V_REOR REOR
WHERE 
ACOR.ORDER_ID = ORTR.ORDER_ID
AND 
(SELECT MIN(ARRIVE_DATE_ORTR)  AS ARRIVE_DATE FROM V_ORTR )
BETWEEN  MSAC.BEGIN_DATE AND  MSAC.END_DATE
AND 
(SELECT MIN(ARRIVE_DATE_ORTR)  AS ARRIVE_DATE FROM V_ORTR )
BETWEEN  MSRC.BEGIN_DATE AND  MSRC.END_DATE
AND  
(SELECT MIN(ARRIVE_DATE_REOR)  AS ARRIVE_DATE FROM V_REOR )
BETWEEN  MSAC.BEGIN_DATE AND  MSAC.END_DATE
AND 
(SELECT MIN(ARRIVE_DATE_REOR)  AS ARRIVE_DATE FROM V_REOR )
BETWEEN  MSRC.BEGIN_DATE AND  MSRC.END_DATE*`

問題は、すべてのケースで MIN(ARRIVE_DATE) であり、すべてのエントリの最小値が得られます。私たちの要件は、ORDER_ID に基づいて最小日付を取得することでした。そこで、MIN(ARRIVE_DATE) の代わりに以下を試してみました。

`(SELECT ARRIVE_DATE FROM V_ORTR  
qualify row_NUMBER() over (PARTITION  by ORDER_ID order by ARRIVE_DATE ASC) = 1
)BETWEEN  MSAC.BEGIN_DATE AND  MSAC.END_DATE`

これはエラーを示しています:

サブクエリでは、順序付き分析関数は使用できません。

以下でも試しました:

`*sel * from 
(
sel A.*
from (sel * FROM V_ORTR
QUALIFY row_NUMBER() over (PARTITION  by ORTR.ORDER_ID order by ORTR.ARRIVE_DATE ASC)=1
) A ,
sel B.*
from (sel * FROM V_REOR
QUALIFY row_NUMBER() over (PARTITION  by REOR.ORDER_ID order by REOR.ARRIVE_DATE_ORDR_TR ASC)=1 
)B ,
V_ACOR,
V_MSAC,
V_MSRC
WHERE 
ACOR.ORDER_ID_ORDR = A.ORDER_ID
AND A.ARRIVE_DATE_ORTR BETWEEN MSAC.BEGIN_DATE AND MSAC.END_DATE
AND A.ARRIVE_DATE_ORTR BETWEEN MSRC.BEGIN_DATE AND MSRC.END_DATE
AND B.ARRIVE_DATE_REOR BETWEEN MSAC.BEGIN_DATE AND MSAC.END_DATE
AND B.ARRIVE_DATE_REOR BETWEEN MSRC.BEGIN_DATE AND MSRC.END_DATE
)*`

これも以下のエラーを出しています:

構文エラーです。名前、Unicode 区切りの識別子、または「.」と「sel」キーワードの間の「(」のようなものが必要です。

4

1 に答える 1