Dette er meget enkelt at svare på. Du har to record
og to alarm
. Du tilslutter dig disse og får fire poster, som du tæller.
Du kan løse dette problem ved at tælle forskellige id'er:
COUNT(DISTINCT records.id) AS "last24HMessagesCount",
COUNT(DISTINCT alarms.id) AS "activeAlarmsCount"
men jeg vil ikke anbefale dette. Hvorfor tilslutter du dig record
og alarm
alligevel? De er ikke direkte relaterede. Hvad du ønsker at deltage er antallet af record
og antallet af alarm
. Så samle før du tilmelder dig:
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;
(Jeg har fjernet den unødvendige joinforbindelse til "gruppe"-tabellen.)