在DB2中使用MAx和GROUPBY

在DB2中使用MAx和GROUPBY,db2,Db2,我正在DB2中执行下面的查询 select SOURCE1 , PLANT1, max(BEGIN_TIMESTAMP) as dat , END_TIMESTAMP, TIMESTAMPDIFF(2,CAST((END_TIMESTAMP - BEGIN_TIMESTAMP) AS CHAR(22))) from tab1 group by dat 然而,我得到了这个错误: 2:01:01[选择-0行,0.000秒][错误代码:-206,SQL状态:42703]DB2 S

我正在DB2中执行下面的查询

select SOURCE1 , PLANT1,  max(BEGIN_TIMESTAMP) as dat , END_TIMESTAMP,
        TIMESTAMPDIFF(2,CAST((END_TIMESTAMP - BEGIN_TIMESTAMP) AS CHAR(22))) 
from tab1
group by dat
然而,我得到了这个错误:

2:01:01[选择-0行,0.000秒][错误代码:-206,SQL状态:42703]DB2 SQL错误:SQLCODE=-206,SQLSTATE=42703,SQLERRMC=DAT,DRIVER=3.50.152 ... 执行1条语句,影响0行,执行/获取时间:0.000/0.000秒[0成功,0警告,1错误]


有什么想法吗?

您需要在
分组中包含所有未聚合的列。目前尚不清楚您到底想要什么,但至少应该解析并运行:

select SOURCE1, PLANT1,  max(BEGIN_TIMESTAMP) as dat , END_TIMESTAMP,
        TIMESTAMPDIFF(2, CAST((END_TIMESTAMP - BEGIN_TIMESTAMP) AS CHAR(22))) 
from tab1
group by SOURCE1, PLANT1, END_TIMESTAMP;

这是你的建议,谢谢。但是,它没有转换正确的结果侧注:(部分原因是时间戳减法返回的相对间隔,)
TIMESTAMPDIFF
返回一个估计值。特别是,当您有一个月(至少1天)或一年(5或6天)时,该值将被禁用。