Dit is heel eenvoudig te beantwoorden. Je hebt twee record
en twee alarm
. Je sluit je hierbij aan en krijgt vier records, die je telt.
U kunt dit probleem omzeilen door verschillende ID's te tellen:
COUNT(DISTINCT records.id) AS "last24HMessagesCount",
COUNT(DISTINCT alarms.id) AS "activeAlarmsCount"
maar ik zou dit niet aanraden. Waarom doe je mee met record
en alarm
hoe dan ook? Ze zijn niet direct gerelateerd. Wat je wilt om mee te doen is het aantal record
en het aantal alarm
. Dus verzamel voordat je lid wordt:
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;
(Ik heb de onnodige join naar de "groeps"-tabel verwijderd.)