2016-08-22 50 views
1

我想選擇一個布爾值,其中order.lastUpdated是超過30分鐘前,但我得到的錯誤:MySQL的無效使用組功能與MAX()

SQL state [HY000]; error code [1111]; Invalid use of group function; nested exception is java.sql.SQLException: Invalid use of group function

下面是該查詢:

select 
c.externalReference channelReference, 
c.id channelId, 
max(o.lastUpdated) lastUpdated, 
sum(if(max(o.lastUpdated) < date_sub(now(), interval 30 minute), 0, 1)) beforeThreshold 
from channel c 
join order_item o on c.id = o.channelId 
where date(o.lastUpdated) = date(now()) 
and o.lastUpdated > date_sub(now(), interval 1 hour) 
group by c.externalReference; 

我怎樣才能返回一個布爾值,如果o.lastUpdated是超過30分鐘前,我必須使用max()

+1

先試試c.externalReference,c.id然後看看有沒有什麼區別 – Moptan

+0

我仍然得到同樣的錯誤。 – crm

+2

您不能嵌套集合函數('sum(max)'),'max'必須在Derived Table中完成,而'Sum'在其上。 – dnoeth

回答

1

不能嵌套聚合函數,如SUM()MAX()。你需要做一個子查詢中的內部。

SELECT c.externalReference AS channelReference, 
     c.id AS ChannelId 
     o.lastUpdated, 
     SUM(IF(o.lastUpdated < DATE_SUB(NOW(), INTERVAL 30 MINUTE), 0, 1) AS beforeThreshold 
FROM channel AS c 
JOIN (SELECT channelId, MAX(lastUpdated) AS lastUpdated 
     FROM order_item 
     WHERE DATE(lastUpdated) = TODAY() 
     AND lastUpdated > DATE_SUB(NOW(), INTERVAL 1 HOUR) 
     GROUP BY channelId) AS o 
ON c.id = o.channelId 
GROUP BY c.externalReference