2016-11-16 78 views
0

我试着在DB2上运行此查询:如何使用聚合函数比较

SELECT A.EMAIL_ADDR_ID, A.SENT_TS, B.SENT_TS FROM ecom.EMAIL_HIST A 
INNER JOIN ecom.EMAIL_RTM_HIST B 
ON A.EMAIL_ADDR_ID = B.EMAIL_ADDR_ID 
WHERE max(b.SENT_TS) > max(a.SENT_TS) 
GROUP BY A.EMAIL_ADDR_ID; 

在试图运行上面的查询,我得到这个以下错误消息。

SQL Error [42903]: Invalid use of an aggregate function or OLAP function..SQLCODE=-120, SQLSTATE=42903, DRIVER=3.64.114 

任何关于我在这里做了什么错误的指针?

谢谢!

回答

0

溶液1

SELECT A.EMAIL_ADDR_ID, max(A.SENT_TS) maxsendTS_A, max(B.SENT_TS) maxsendTS_B 
FROM ecom.EMAIL_HIST A INNER JOIN ecom.EMAIL_RTM_HIST B 
ON A.EMAIL_ADDR_ID = B.EMAIL_ADDR_ID 
GROUP BY A.EMAIL_ADDR_ID 
having max(b.SENT_TS) > max(a.SENT_TS) 
+0

谢谢Esperento57。我添加了'as'以使maxsendTS_A和B和查询起作用。 – Ganesh

0

你需要一个having条款:

SELECT A.EMAIL_ADDR_ID, MAX(A.SENT_TS), MAX(B.SENT_TS) 
FROM ecom.EMAIL_HIST A INNER JOIN 
    ecom.EMAIL_RTM_HIST B 
    ON A.EMAIL_ADDR_ID = B.EMAIL_ADDR_ID 
GROUP BY A.EMAIL_ADDR_ID 
HAVING max(b.SENT_TS) > max(a.SENT_TS); 
+0

谢谢戈登·利诺夫。我必须将A.SENT_TS,B.SENT_TS作为max(A.SENT_TS)和max(B.SENT_TS)并且查询起作用。 – Ganesh

+0

@Ganesh。 。 。是的。 。 。当我回答时,我甚至没有看到“选择”。 –

0

解决方案2

修改您的查询像这样

select * from (
SELECT A.EMAIL_ADDR_ID, max(A.SENT_TS) maxsendTS_A, max(B.SENT_TS) maxsendTS_B 
FROM ecom.EMAIL_HIST A INNER JOIN ecom.EMAIL_RTM_HIST B 
ON A.EMAIL_ADDR_ID = B.EMAIL_ADDR_ID 
GROUP BY A.EMAIL_ADDR_ID 
) tmp where maxsendTS_B>maxsendTS_A