Как избежать того, чтобы строки GROUP_CONCAT () умножали мой SUM () - PullRequest
0 голосов
/ 26 июня 2018

Итак, у меня есть запрос, который извлекает заявки в службу поддержки, и с помощью GROUP_CONCAT() я извлекаю каждый статус заявки в одну строку, чтобы обработать PHP в виде массива.

Моя проблема в том, что у меня есть запросSUM() чтобы получить время, потраченное на каждый тикет из его интервенций, но, например, если GROUP_CONCAT() извлекает 12 статусов, а сумма тикета составляет 2400 секунд, конечный результат SUM() равен 2400 x 12 = 28800.

Вот мой запрос:

SELECT t.subject as theme, SUM(fd.duree) as time, t.datec, t.date_close, t.category_code as category, GROUP_CONCAT(DISTINCT IFNULL(tl.status, 0),'_',tl.datec ORDER BY tl.datec) as status
FROM llx_ticketsup as t
JOIN llx_societe as s on s.rowid = t.fk_soc
JOIN llx_user as u on u.rowid = t.fk_user_assign
JOIN llx_element_element as ee on ee.fk_source = t.rowid
JOIN llx_fichinter as f on f.rowid = ee.fk_target
JOIN llx_fichinterdet as fd on fd.fk_fichinter = f.rowid
JOIN llx_ticketsup_logs as tl on tl.fk_track_id = t.track_id
WHERE t.fk_statut = 8
AND t.fk_soc = 165
AND (STR_TO_DATE(t.date_close, '%Y-%m-%d') BETWEEN '2018-06-25' AND '2018-06-25 23:59:59')
GROUP BY t.rowid

Результат:

enter image description here

Он должен иметь 2400 по времени, но умножаетсяпо его 12 статусам.

Если я тоже группирую по статусам, время хорошо, как вы можете видеть, но мне нужна только одна строка с экспансией билета в реальном времени и объединенными его статусами.

enter image description here

Мой вопрос: как можно избежать GROUP_CONCAT() строк, чтобы не умножить мои SUM()?

* РЕДАКТИРОВАТЬ: Я сделал этоработать путем деления SUM(fd.duree)/COUNT(DISTINCT tl.rowid).Я знаю, что это странное решение, но не знаю, как поступить иначе.Если у кого-нибудь есть какие-либо предложения, буду признателен.Спасибо!

1 Ответ

0 голосов
/ 26 июня 2018
SELECT t.subject as theme, 
  SUM(fd.duree) as time, 
  t.datec, t.date_close, 
  t.category_code as category, 
  (SELECT GROUP_CONCAT(DISTINCT COALESCE(l.status, 0),'_',l.datec ORDER BY l.datec) 
    FROM llx_ticketsup_logs AS l WHERE fk_track_id = t.track_id) as status
FROM llx_ticketsup as t
JOIN llx_element_element as ee on ee.fk_source = t.rowid
JOIN llx_fichinter as f on f.rowid = ee.fk_target
JOIN llx_fichinterdet as fd on fd.fk_fichinter = f.rowid
WHERE t.fk_statut = 8
AND t.fk_soc = 165
AND (STR_TO_DATE(t.date_close, '%Y-%m-%d') BETWEEN '2018-06-25' AND '2018-06-25 23:59:59')
GROUP BY t.rowid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...