Я пытаюсь устранить неполадку конкретного "отчета", который генерируется в приложении PHP, запущенном на платформе VOIP (связанные с биллингом). Человек, который попросил меня сделать это, заявил, "он работал до";)
Ошибка 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, я считаю, еще не уверен. Просто хотел получить обратную связь.
Из результатов Google я обнаружил, что некоторые люди добились успеха, исправив это, изменив запрос как Having
вместо where
?
Не уверен. Что-нибудь выглядит странно ниже?
То, что я нашел после обзора, заключается в том, что причиной этого было просто несоответствие MySQL. Первоначально код MySQL был написан для версии 5.0.51a, а работающая версия MySQL (как-то "попытка" была обновлена, была 5.0.21).
Эта версия 'downgrade' была причиной неудавшегося SQL. Я честно не знаю, в чем причина была другая, чем мы установили новую версию MySQL, чтобы просто выполнить тест (в удаленном ящике), и он решил проблему (указав из основного поля резервное копирование сервера MySQL.
Решение этой ошибки: Совместимость версий
Попробуйте включить C.ResourceGroupID
в свой оператор group by
. Вам нужно включить все неагрегатные элементы в свой выбор в своей группе.
Вам не нужно использовать having
в приведенном выше коде.
Я не уверен, как это могло работать раньше...