2010-10-19 60 views
0

之前工作我想解决在VOIP平台上运行的PHP应用程序(与计费相关)上生成的特定“报告”。这让我做这个声明“之前的工作”的人;)奇怪的Mysql错误1111,据说在

MySQL错误抛出: 1111: Invalid use of group function

疯狂的事情是,它之前的工作“,但一段时间后停止,他们无法将采取什么事件可能已经创建了这个bug的地方。一个想法可能是MYSQL升级?我GOOGLE了错误,似乎无法找到明确的答案。

乍一看你们在SQL中看到什么错误吗?

SELECT C.ResourceGroupID AS CustomerID, CS.CustomerName, SUM(C.IN_RndDuration/60) AS Minutes, SUM(CASE WHEN (C.OUT_Duration>0 AND C.IN_RndDuration>0) THEN 1 ELSE 0 END) AS Successfull, count(0) AS Attempts  
FROM ws_call_current AS C 
LEFT JOIN customer_rg AS V_RG ON 
V_RG.RGId=C.OtherResourceGroupID AND V_RG.RateTableId IS NOT NULL AND V_RG.Direction='O' 
LEFT JOIN customer AS V ON V.CustomerId=V_RG.CustomerId 
LEFT JOIN customer_rg AS CS_RG ON CS_RG.RGId=C.ResourceGroupID AND CS_RG.RateTableId IS NOT NULL AND CS_RG.Direction='I'  
LEFT JOIN customer AS CS ON CS.CustomerId=CS_RG.CustomerId  
WHERE DATE_FORMAT(DATE_ADD(C.SeizeDate, INTERVAL TIME_TO_SEC(C.SeizeTime) SECOND), '%Y-%m-%d %H:%i:00') BETWEEN '2010-10-19 00:00:00' AND '2010-10-19 23:59:59'  
AND C.SeizeDate BETWEEN '2010-10-19' AND '2010-10-19'  
GROUP BY CS.CustomerName  
ORDER BY SUM(C.IN_RndDuration/60) DESC 

这是写给MYSQL 3/4我相信,还不确定。只是想获得一些反馈。 从谷歌搜索结果我发现有些人通过修改查询是一个Having而不是一个where解决此问题已成功?

不确定。下面有什么奇怪的东西?

回答

0

我检讨后发现那是什么这个原因只是一个MySQL差异。最初,MySQL代码是为5.0.51a编写的,并且正在运行的MySQL版本(它以某种方式“尝试”升级,为5.0.21)。

此版本的“降级”是SQL失败的原因。我真的不知道是什么原因,除了我们安装了一个新版本的MySQL,只是做一个测试(在一个远程盒子上),它解决了问题(从主盒子指向备份MySQL服务器)

解决方案对于此错误:版本兼容性

0

尝试在您的group by声明中包含C.ResourceGroupID。您需要在您的群组中包含所有非汇总项目。

在上面的代码中,您不应该需要having

我不知道它是如何可能已经工作过......

+0

在MySQL中,这是[配置设置](http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_only_full_group_by)。 – 2010-10-19 15:00:47

+0

有趣的是,我不知道这一点。@Jakub是否有这样的工作空间? – 2010-10-19 15:02:10