MYSQL пивот с усиленным фильтром - PullRequest
0 голосов
/ 30 января 2020

Я поворачиваю значения из столбцов pe_date, pe_batch и pe_tarive в новые столбцы c1, c2 и c3. Работает хорошо. Но теперь я хочу отфильтровать значение даты из pe_date между Date1 и Date 2.

Где разместить WHERE BETWEEN Date1 и Date2? Не могу понять это. Спасибо за помощь!

SELECT t.submit_time,
 (SELECT field_value FROM mytable WHERE submit_time = t.submit_time AND field_name ='pe_date') as 'c1',
 (SELECT field_value FROM mytable WHERE submit_time = t.submit_time AND field_name ='pe_batch') as 'c2',
 (SELECT field_value FROM mytable WHERE submit_time = t.submit_time AND field_name ='pe_tarive') as 'c3'
FROM  mytable
GROUP BY t.submit_time
ORDER BY c1 ASC

1 Ответ

1 голос
/ 30 января 2020

Я бы написал это, используя pivoting logi c как:

SELECT
    submit_time,
    MAX(CASE WHEN field_name = 'pe_date'   THEN field_value END) AS c1,
    MAX(CASE WHEN field_name = 'pe_batch'  THEN field_value END) AS c2,
    MAX(CASE WHEN field_name = 'pe_tarive' THEN field_value END) AS c3
FROM mytable
WHERE
    -- some restriction on the date
GROUP BY
    submit_time;

Из того, что я вижу, может быть, вам просто нужно добавить предложение WHERE. Единственное место, где может иметь смысл ограничение по датам, - это предложение HAVING.

...