这是我的表列名称:
id_x | id_y | ts | data_a | data_b | data_c
我正在运行以下查询:
SELECT ts, data_a, data_b, data_c from table
WHERE id_x=4392
AND id_y IN (2545,2614,3349,4430)
AND ts BETWEEN '2017-02-01' AND '2017-03-01'
我得到的结果如下:
2017-02-01 | 4 | 4 | 0
2017-02-01 | 140 | 30 | 29
2017-02-02 | 4 | 4 | 0
2017-02-02 | 289 | 63 | 60
ts
字段已列出多次。
我更喜欢一次,总结一下单元格内容。
是否可以通过这种方式对ts
(时间戳)列进行分组?
想要的结果:
2017-02-01 | 144 | 34 | 29
2017-02-02 | 293 | 67 | 60
答案 0 :(得分:3)
您需要提取日期并进行汇总:
SELECT DATE(ts) as ts_date, SUM(data_a) as data_a,
SUM(data_b) as data_b, SUM(data_c) as data_c
FROM table
WHERE id_x = 4392 AND
id_y IN (2545, 2614, 3349, 4430) AND
ts >= '2017-02-01' AND
ts < '2017-03-01'
GROUP BY DATE(ts) ;
注意:
GROUP BY
和SUM()
进行您所拥有的处理。WHERE
子句中的日期条件已更改,因此您获得了所有2月的值,而没有3月的值。如果您希望日期范围包含3月1日,请使用:
ts >= '2017-02-01' AND
ts < '2017-03-02'
此结构(带有>=
和<
)适用于日期和日期/时间。我强烈建议您不要将BETWEEN
与日期/时间数据类型一起使用,因为结果可能会产生误导。
答案 1 :(得分:2)
您需要使用sum()
聚合和group by
子句
SELECT ts, sum(data_a), sum(data_b), sum(data_c) from table
WHERE id_x=4392
AND id_y IN (2545,2614,3349,4430)
AND ts BETWEEN '2017-02-01' AND '2017-03-01'
group by ts