У меня есть неэлегантное решение для поворота запроса SELECT в MySQL с использованием функций CASE, которые я использовал ранее, но не могу видеть, где я могу ошибиться, поскольку я не получаю ожидаемых результатов , В попытке передать мои намерения:Сводка с футляром и группой
Я пытаюсь отслеживать ход штампов времени для уникальной ссылки, которую я могу легко вытащить в запросе SELECT, но вам нужно повернуть их в строки. Я сделал это с помощью следующего запроса:
SELECT c.ID, d.lead_id,
CASE WHEN s.summary LIKE '%submitted and status set to "Pending FA Approval"%' THEN DATE_FORMAT(CONVERT_TZ (s.created,'+00:00','-06:00'), '%M %e, %Y [%h:%i %p]') END AS a,
CASE WHEN s.summary LIKE '%("Pending FA Approval" => "Not Approved, Please Revise")%' THEN DATE_FORMAT(CONVERT_TZ (s.created,'+00:00','-06:00'), '%M %e, %Y [%h:%i %p]') END AS b,
CASE WHEN s.summary LIKE '%("Not Approved, Please Revise" => "Pending FA Approval")%' THEN DATE_FORMAT(CONVERT_TZ (s.created,'+00:00','-06:00'), '%M %e, %Y [%h:%i %p]') END AS c,
CASE WHEN s.summary LIKE '%("Pending FA Approval" => "Complete, Pending Payment")%' THEN DATE_FORMAT(CONVERT_TZ (s.created,'+00:00','-06:00'), '%M %e, %Y [%h:%i %p]') END AS d,
CASE WHEN s.summary LIKE '%("Complete, Pending Payment" => "Paid, Complete")%' THEN DATE_FORMAT(CONVERT_TZ (s.created,'+00:00','-06:00'), '%M %e, %Y [%h:%i %p]') END AS e,
CASE WHEN s.summary LIKE '%("Paid, Complete" => "Processing")%' THEN DATE_FORMAT(CONVERT_TZ (s.created,'+00:00','-06:00'), '%M %e, %Y [%h:%i %p]') END AS f,
CASE WHEN s.summary LIKE '%("Paid, Complete" => "Processed")%' THEN DATE_FORMAT(CONVERT_TZ (s.created,'+00:00','-06:00'), '%M %e, %Y [%h:%i %p]') END AS g
FROM lead_detail d
JOIN stream s ON s.object_id = d.lead_id
JOIN chapter c ON c.ID = d.`value`
WHERE d.field_number = 41
AND s.created >= "2017-02-15"
AND s.action = "status-change"
AND s.summary NOT LIKE "%Voided%"
AND c.ID = 549
Это возвращает следующее:
ID | lead_id | a | b | c | d | e | f | g
549 | 14512 | February 15, 2017 [08:53 PM]| NULL | NULL | NULL | NULL | NULL | NULL
549 | 14512 | NULL | NULL | NULL | February 15, 2017 [08:54 PM]| NULL | NULL | NULL
У меня есть проблема в том, что, когда я агрегировать путем добавления GROUP BY c.ID
к концу моего запроса, я получаю:
ID | lead_id | a | b | c | d | e | f | g
549 | 14512 | February 15, 2017 [08:53 PM]| NULL | NULL | NULL | NULL | NULL | NULL
вместо того, что я искал, чтобы быть:
ID | lead_id | a | b | c | d | e | f | g
549 | 14512 | February 15, 2017 [08:53 PM]| NULL | NULL | February 15, 2017 [08:54 PM]| NULL | NULL | NULL
Это относительный образец, в то время как другие примеры, с которыми я работаю, имеют разные значения спорадически во всех операциях CASE a-g. Я смотрю на многие источники, и кажется, что агрегаты GROUP не помещаются с NULL, но я не могу найти хороший конкретный пример или объяснение, чтобы позволить мне получить то, в чем я нуждаюсь: одна строка, с результатом, вырванным из CASE в отдельных столбцах, где возвращаемое значение равно NULL (или '') до замены при создании записи даты. Это также необходимо сделать в выбранном запросе без удобства просто реорганизовать данные в более подходящие реляционные таблицы.
Также, если это имеет значение, этот пример должен быть разрешен, как описано, но знайте, что он также будет соединен UNION с дополнительными значениями c.ID.
Любая помощь или руководство были бы очень благодарны, даже если это просто указать, что я собираюсь сделать это совершенно неправильно.
Я думаю, один из этих вопросов должно помочь: [1] (http://stackoverflow.com/questions/29360052/ use-coalesce-or-something-like-it-with-group-by-in-sql-server), [2] (http://stackoverflow.com/questions/11418870/sql-ugly-combination-of-group -by-and-coalesce) – yeputons
tl; dr: вы можете использовать подзапросы, чтобы находить значения 'a' и т. д .; вы можете попробовать использовать агрегатные функции, такие как 'max' на столбцах' a', 'b', ..., чтобы найти некоторую непустую дату. – yeputons