Db2 MAX(),按错误分组

Db2 MAX(),按错误分组,db2,max,Db2,Max,在DB2V9z/Os上 查询将显示在下面三行 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_

在DB2V9z/Os上

查询将显示在下面三行

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\u CASE\u OPEN\u DT和I42\u FM\u BEG\u DT的最大值只返回一行。如果我使用:

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没有GROUPBY子句的SELECT语句在SELECT子句中包含列名或表达式以及列函数,或者列名或表达式包含在SELECT子句中,但不包含在GROUPBY子句中。SQLSTATE=42803

如果我使用:

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;
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保留字“和”后面的“和”的使用无效。预期标记可能包括:“微秒微秒秒分秒小时”。SQLSTATE=42601

有人对我还能做什么有什么建议吗


谢谢

第二个错误告诉您需要知道的一切:

没有GROUP BY子句的SELECT语句在SELECT子句中包含列名或表达式以及列函数,或者列名或表达式包含在SELECT子句中,但不包含在GROUP BY子句中

如果使用聚合(
MAX
MIN
等),则必须按select语句中的所有其他字段进行分组,而您尚未这样做

接受第二个查询并添加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;

谢谢你的回复。虽然我没有收到错误,但查询仍然返回了三行。然后,这三行之间的值导致行不同。您应该删除每行包含不同数据的列,如果需要这些列,您应该重新访问您试图完成的任务。