Detta är väldigt enkelt att svara på. Du har två record
och två alarm
. Du går med i dessa och får fyra poster som du räknar.
Du kan lösa det här problemet genom att räkna distinkta ID:n:
COUNT(DISTINCT records.id) AS "last24HMessagesCount",
COUNT(DISTINCT alarms.id) AS "activeAlarmsCount"
men jag skulle inte rekommendera detta. Varför går du med i record
och alarm
i alla fall? De är inte direkt relaterade. Vad du vill ha att gå med är antalet record
och antalet alarm
. Så sammanställ innan du går med:
SELECT
device.id,
device.name,
records.cnt AS "last24HMessagesCount",
alarms.cnt AS "activeAlarmsCount"
FROM device
LEFT OUTER JOIN
(
SELECT deviceId, count(*) AS cnt
FROM record
WHERE "date" > '2017-07-12 11:43:02.838 +00:00'
GROUP BY deviceId
) AS records ON device.id = records.deviceId
LEFT OUTER JOIN
(
SELECT deviceId, count(*) AS cnt
FROM alarm
WHERE status = 'new'
GROUP BY deviceId
) AS alarms ON device.id = alarms.deviceId
WHERE device.serviceId = 1832
AND device.groupId = 205;
(Jag har tagit bort den onödiga kopplingen till "grupp"-tabellen.)