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」キーワードの間の「(」のようなものが必要です。