0

我有这个 SQL 查询,可以在 2 个日期之间获取一些数据:

SELECT sum(Line1) Line1, sum(Line2) Line2,sum(Line3) Line3, sum(Line4) Line4, sum(Line5) Line5, sum(Line6) Line6, 
sum(Line7) Line7, sum(Line8) Line8, sum(Line9) Line9, sum(Line10) Line10 FROM
[Sensor_1]
WHERE TimeStamp BETWEEN '2018-08-17 00:00' AND '2018-08-17 23:59'

基本上,我有一个名为“Sensor_1”的表,我选择有多少人通过该传感器。问题是有多个传感器,所以我为每个传感器添加了另一个表,所以如果我想从例如 Sensor_2 中选择数据,我也会这样做,但 Table = Sensor_2

现在,有没有办法把它们放在一起?我有这样的事情,但没有工作:

SELECT sum(s1.Line1 + s2.Line1) ..., sum(s1.Line10 + s2.Line10) Line10 FROM
[Sensor_1] as s1, [Sensor_2] as s2
WHERE TimeStamp BETWEEN '2018-08-17 00:00' AND '2018-08-17 23:59'

或者也

SELECT sum(Line1) Line1, ... , sum(Line10) Line10 FROM
(SELECT *
 FROM [Sensor_1]
 UNION
 SELECT *
 FROM [Sensor_2]
)
WHERE TimeStamp BETWEEN '2018-08-17 00:00' AND '2018-08-17 23:59'

这是我正在使用的数据库(SQLite):https ://drive.google.com/file/d/1on_sSN_QM3FnPUcKo03iA3cE6uv1Y5uQ/view?usp=sharing

4

3 回答 3

1

我将创建一个视图来抽象许多下级表的存在,因此如果添加或删除传感器,您只需要相应地更新此视图并让任何派生查询无缝工作。

视图可能很简单:

create view Sensor_All as
   select 'sensor1' as sensor_name, *  from Sensor_1
   union all 
   select 'sensor2' as sensor_name, *  from Sensor_2

请注意,为了简单起见,我使用*了它,但您应该命名所有列以避免列交换。

我还添加了一个sensor_name列,因为稍后在某些查询中包含这些信息可能会很有用。

现在您可以使用Sensor_All视图创建您喜欢的任何查询,您的查询将变得如此简单

SELECT sum(Line1), sum(Line2) FROM
[Sensor_All]
WHERE TimeStamp BETWEEN '2018-08-17 00:00' AND '2018-08-17 23:59'
于 2018-08-20T10:44:24.367 回答
0

我终于设法通过添加两个表的条​​件来做到这一点,如下所示:

SELECT sum(Line1) AS Line1, ... ,  sum(Line10) AS Line10
FROM (
    SELECT Line1, ... , Line10
    FROM Sensor_1
    WHERE TimeStamp BETWEEN '2018-08-17 00:00' AND '2018-08-17 23:59'
UNION ALL
    SELECT Line1, ... , Line10
    FROM Sensor_2
    WHERE TimeStamp BETWEEN '2018-08-17 00:00' AND '2018-08-17 23:59'
    )
于 2018-08-20T08:34:36.473 回答
0

您的第二个查询应该与union all. 我会明确列出这些列:

select sum(Line1) as Line1, ... , sum(Line10) as Line10
from ((select timestamp, line1, line2, . . .
       from sensor_1
      ) union all
      (select timestamp, line1, line2, . . .
       from sensor_2
      )
     ) s
where TimeStamp >= '2018-08-17' and
      TimeStamp < '2018-08-18';
于 2018-08-17T11:31:45.227 回答