【问题标题】:MYSQL pivot with enhanced filter needed需要增强过滤器的 MYSQL 数据透视表
【发布时间】:2020-01-30 16:58:40
【问题描述】:

我将 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

【问题讨论】:

标签: mysql pivot-table


【解决方案1】:

我将使用旋转逻辑将其编写为:

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 子句。

【讨论】:

  • 感谢蒂姆,添加:WHERE C1 BETWEEN '2018-01-01' AND '2019-01-01' 尽管表中有足够的数据,但结果为零
  • 已解决: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 wp_cf7dbplugin_submits GROUP BY submit_time HAVING c1 BETWEEN '2018-01-01' AND '2019-12-31'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多