在基于日期和另一个字段的Mysql查询中合并表行数据。表有超过2M行

时间:2017-02-02 12:48:52

标签: php mysql date optimization

以下是数据样本表

  ID MC BC  TIME                  AB   AT 
   1  4  10  2016-12-05 09:02:00   5    8
   2  4  20  2016-12-15 09:03:00   2    3
   3  4  10  2016-12-15 09:02:00   1    4
   4  4  20  2016-12-25 09:02:00   3    6
   5  4  05  2016-12-05 09:02:00   4    2
   6  4  05  2016-12-08 09:02:00   6    2
   7  4  10  2016-12-11 09:02:00   7    6
   8  4  10  2016-12-05 09:02:00   9    8
   9  4  10  2016-12-15 09:02:00   9    8
  10  4  10  2016-12-15 09:05:00   10   20
  11  5  10  2016-12-15 09:05:00   10   20
  12  5  10  2016-12-15 09:05:00   10   20
  13  5  10  2016-12-15 09:05:00   10   20

如果我查询的地点' MC' = 4和' TIME'像2016-12%那样我想要' AB'和' AT'列根据“时间”和“时间”合并列和每个BC'有单独的一天合并。

如同样本输出第15天有两个' BC' (10,20)他们有两排不同。

我想要像这样的输出

  ID  MC BC  TIME          AB   AT 
   1  4  10  2016-12-05    14   16
   2  4  10  2016-12-11     7    6
   3  4  10  2016-12-15    20   32
   4  4  20  2016-12-15     2    3
   5  4  20  2016-12-25     3    6
   6  4  05  2016-12-05     4    2
   7  4  05  2016-12-08     6    2

表中当前月份的行数超过200万行,如样本表中所示。

1 个答案:

答案 0 :(得分:0)

SELECT MC,
       BC,
       DATE(`TIME`) AS 'Day'
       SUM(AB) AS AB,
       SUM(AT) AS AT
    FROM tbl
    WHERE `TIME` >= '2016-12-01`
      AND `TIME`  < '2016-12-01` + INTERVAL 1 MONTH
      AND MC = 4
    GROUP BY MC, BC, DATE(`TIME`);

这很有用:

INDEX(MC, `TIME`)