sql - 在单个 SQL 查询中查询相似但不相交的数据集

标签 sql mysql sql-server

在 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 )

依此类推,(例如)接口(interface) 1 上进出流量的 1 分钟样本,每天提供 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;

即我希望对两个表进行查询和聚合,但是一个接着一个,而不是连接起来。

最佳答案

您想要合并两个(或更多)表:

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,因为我认为它可以避免测试重复行数据的开销。

关于sql - 在单个 SQL 查询中查询相似但不相交的数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/699368/

上一篇:MySQL计数

下一篇:Mysql 查询不工作

相关文章:

sql - 如何通过sql选择第一个、最后一个、上一个和下一个

mysql - 如何在 MySQL 中返回数据透视表输出?

php - Mysql事务错误信息

ASP.NET 成员角色

在读取器上调用 Close() 后 MySqlDataReader 不会关闭

sql-server - 如何合并两行并对 UPDATE 中的某些列求和?

c# - C# 中的多个 SQL 查询将变量作为列返回

mysql - 如何去除重复并获得最大值(value)

SQL 将列中的多个值连接到一个单元格中

php - 提交后保持选择可见