我正在尝试解决在VOIP平台上运行的PHP应用程序生成的特定“报告”(与计费相关)。要求我这样做的人说“它之前有效”;)
抛出MySQL错误:
1111: Invalid use of group function
疯狂的事情是,它'先于'工作'但在一段时间后停止,他们无法发生可能造成此错误的事件。有人认为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 :(得分:0)
尝试在C.ResourceGroupID
声明中加入group by
。您需要在组中的选择中包含所有非聚合项目。
上面的代码中不需要having
。
我不确定它之前是如何起作用的......
答案 1 :(得分:0)
我在审核后发现,其原因仅仅是MySQL的差异。最初,MySQL代码是为5.0.51a编写的,运行的MySQL版本(以某种方式'尝试'升级,为5.0.21)。
此版本的“降级”是导致SQL失败的原因。老实说我不知道原因是什么,除了我们安装新版本的MySQL只是做一个测试(在远程盒子上)它解决了问题(从主盒指向备份MySQL服务器。
此错误的解决方案:版本兼容性