Я сталкиваюсь с проблемой Доктрины / SQL! У меня есть объект Device
и объект DeviceStatusHistory
с отношением Many-to-Many
.
Объект DeviceStatusHistory
имеет 4 свойства: id
, device
, status
, dateAdd
.
Объект Device
имеет: id
, dateAdd
, ...
Я хочу, чтобы каждые 12 прошедших месяцев УЧЕТ устройств по последнему состоянию (в последний день месяца).
Я пробовал несколько Mysql запросов в PhpMyAdmin, начиная со стороны DeviceStatusHistory' side or by
Device`, но мне не удалось получить желаемый результат.
Я пытался, например:
SELECT COUNT(DISTINCT(dsh.device_id)) total_devices
, dsh.status
FROM device_status_history dsh
WHERE dsh.status IN ('free', 'assigned', 'deployed', 'given_back', 'to_be_recycled', 'winterized', 'under_repair', 'at_after_sale')
AND dsh.date_add <= LAST_DAY(NOW())
GROUP
BY dsh.status
, он возвращает мне:
+---------------+--------------+
| total_devices | status |
+---------------+--------------+
| 1 | assigned |
| 1585 | deployed |
| 68 | free |
| 2 | given_back |
| 1 | under_repair |
+---------------+--------------+
Если я добавлю DeviceStatusHistory
для 'развернутого' Device
со статусом «Given_back», у меня должно быть
+---------------+--------------+
| total_devices | status |
+---------------+--------------+
| 1 | assigned |
| 1584 | deployed |
| 68 | free |
| 3 | given_back |
| 1 | under_repair |
+---------------+--------------+
Но это дает мне:
+---------------+--------------+
| total_devices | status |
+---------------+--------------+
| 1 | assigned |
| 1585 | deployed |
| 68 | free |
| 3 | given_back |
| 1 | under_repair |
+---------------+--------------+
Мы можем видеть, что мы посчитали устройство дважды, но я хочу посчитать его только один раз.
Как я могу добиться этого за последние 12 месяцев в SQL Quary или Doctrine запросе в Symfony