在SQL中(特别是MySQL,但问题是通用的),当我在不相交的时间范围内有多个表时,查询时间序列数据的最有效方法是什么?例如,如果我的表格如下:
router1_20090330( unixtime integer unsigned,
iface1_in integer unsigned,
iface1_out integer unsigned )
router1_20090331( unixtime integer unsigned,
iface1_in integer unsigned,
iface1_out integer unsigned )
依此类推,使用(比如)1分钟的interface1进出流量样本,每天提供86400条记录。
我希望查询表示类似
的内容SELECT CAST(unixtime/3600 as unsigned) AS hour,
sum(iface1_in), sum(iface1_out)
from router1_20090330 *then* router1_20090331
group by hour order by hour;
即。我希望查询和汇总这两个表,但是一个接一个地而不是加入。
答案 0 :(得分:1)
您希望UNION两个(或更多)表:
SELECT CAST(unixtime/3600 as unsigned) AS hour,
SUM(iface1_in), SUM(iface1_out)
FROM (
SELECT * FROM router1_20090330
UNION ALL
SELECT * FROM router1_20090331
) x
GROUP BY hour
ORDER BY hour
请注意,UNION之后的“ALL”会告诉查询保留重复的行(如果两个表中都显示相同的值 - 在您的方案中不太可能)。我通常使用UNION ALL,因为我认为它避免了为重复行测试数据的开销。