0

DB2 V9 Z/O 上

3 行以下のクエリ。

SELECT J01_REGION, I20_MMS_NO, I20_CONSUMER_ID, I21_CONSUMER_ID, I21_CASE_ID,
I42_FIN_MGR_PROV, J01_PROVIDER, I21_CASE_OPEN_DT, I42_FM_BEG_DT
FROM SERDB.I20_CONSUMER_T INNER JOIN SERDB.I21_CONS_CASE_T ON I20_CONSUMER_ID = 
I21_CONSUMER_ID
INNER JOIN SERDB.I42_FIN_MGR_T ON I21_CASE_ID = I42_CASE_ID 
INNER JOIN SERDB.J01_PROVIDER_T ON I42_FIN_MGR_PROV = J01_PROVIDER
WHERE J01_REGION = 2
AND I20_CONSUMER_ID = 96603

私が望むのは、I21_CASE_OPEN_DT と I42_FM_BEG_DT の MAX 値を使用して、クエリが 1 行だけを返すことです。私が使用する場合:

SELECT J01_REGION, I20_MMS_NO, I20_CONSUMER_ID, I21_CONSUMER_ID, I21_CASE_ID,  MAX 
(I21_CASE_OPEN_DT), MAX(I42_FM_BEG_DT), I42_FIN_MGR_PROV, J01_PROVIDER
FROM SERDB.I20_CONSUMER_T INNER JOIN SERDB.I21_CONS_CASE_T ON I20_CONSUMER_ID = 
I21_CONSUMER_ID 
INNER JOIN SERDB.I42_FIN_MGR_T ON I21_CASE_ID = I42_CASE_ID 
INNER JOIN SERDB.J01_PROVIDER_T ON I42_FIN_MGR_PROV = J01_PROVIDER
WHERE J01_REGION = 2
AND I20_CONSUMER_ID = 96603;

SQL0122N GROUP BY 句のない SELECT ステートメントの SELECT 句に列名または式と列関数が含まれているか、列名または式が SELECT 句に含まれているが GROUP BY 句には含まれていません。SQLSTATE=42803

私が使用する場合:

SELECT J01_REGION, I20_MMS_NO, I20_CONSUMER_ID, I21_CONSUMER_ID, I21_CASE_ID,
I42_FIN_MGR_PROV, J01_PROVIDER, I21_CASE_OPEN_DT, I42_FM_BEG_DT
FROM SERDB.I20_CONSUMER_T INNER JOIN SERDB.I21_CONS_CASE_T ON I20_CONSUMER_ID = 
I21_CONSUMER_ID 
INNER JOIN SERDB.I42_FIN_MGR_T ON I21_CASE_ID = I42_CASE_ID 
INNER JOIN SERDB.J01_PROVIDER_T ON I42_FIN_MGR_PROV =  J01_PROVIDER
WHERE J01_REGION = 2
AND I20_CONSUMER_ID = 96603
AND MAX(I21_CASE_OPEN_DT)
AND MAX(I42_FM_BEG_DT);

受け取りました: SQL0199N 「AND」に続く予約語「AND」の使用は無効です。予想されるトークンには、「MICROSECONDS MICROSECOND SECONDS SECOND MINUTES MINUTE HOURS」が含まれる場合があります。SQLSTATE=42601

他に何ができるかについて誰か提案がありますか?

ありがとうございました

4

1 に答える 1

0

2 番目のエラーは、知っておく必要があるすべてを示しています。

GROUP BY 句のない SELECT ステートメントの SELECT 句に列名または式と列関数が含まれているか、列名または式が SELECT 句に含まれているが GROUP BY 句には含まれていない

集計 ( MAXMINなど) を使用する場合は、select ステートメント内の他のすべてのフィールドでグループ化する必要がありますが、これは行っていません。

2 番目のクエリを取得し、GROUP BY 句を追加すると、次のようになります。

SELECT J01_REGION, I20_MMS_NO, I20_CONSUMER_ID, I21_CONSUMER_ID, I21_CASE_ID,  
    MAX (I21_CASE_OPEN_DT), MAX(I42_FM_BEG_DT), I42_FIN_MGR_PROV, J01_PROVIDER
FROM SERDB.I20_CONSUMER_T INNER JOIN SERDB.I21_CONS_CASE_T ON I20_CONSUMER_ID = 
I21_CONSUMER_ID 
INNER JOIN SERDB.I42_FIN_MGR_T ON I21_CASE_ID = I42_CASE_ID 
INNER JOIN SERDB.J01_PROVIDER_T ON I42_FIN_MGR_PROV = J01_PROVIDER
WHERE J01_REGION = 2
    AND I20_CONSUMER_ID = 96603
GROUP BY J01_REGION, I20_MMS_NO, I20_CONSUMER_ID, I21_CONSUMER_ID, I21_CASE_ID,
    I42_FIN_MGR_PROV, J01_PROVIDER;
于 2012-08-22T17:16:54.543 に答える