MySQL:加入以获取一行中具有相同时间戳的所有数据

时间:2015-01-19 21:38:05

标签: mysql

我有一个表tempData,看起来像这样:

+----------+-------+------+---------------------+
| sensorId | temp  | hum  | sampleTime          |
+----------+-------+------+---------------------+
|       11 | 18.80 |   55 | 2015-01-19 22:10:01 |
|       11 | 18.80 |   55 | 2015-01-19 22:15:01 |
|       11 | 18.80 |   55 | 2015-01-19 22:20:01 |
|       21 | 20.00 |   51 | 2015-01-19 22:10:01 |
|       21 | 20.10 |   50 | 2015-01-19 22:15:01 |
|       21 | 20.00 |   51 | 2015-01-19 22:20:01 |
|       31 | 16.10 |   59 | 2015-01-19 22:10:01 |
|       31 | 16.20 |   59 | 2015-01-19 22:15:01 |
|       31 | 16.20 |   59 | 2015-01-19 22:20:01 |
|       41 |  6.30 |   91 | 2015-01-19 22:10:01 |
|       41 |  6.30 |   91 | 2015-01-19 22:15:01 |
|       41 |  6.30 |   91 | 2015-01-19 22:20:01 |
+----------+-------+------+---------------------+

我正在寻找一个查询,它会在同一行(e.i。11和21)上按照sampleTime分组给出一个包含两个传感器的表:

+---------+--------+---------+--------+---------------------+
| temp_11 | hum_11 | temp_21 | hum_21 | sampleTime          |
+---------+--------+---------+--------+---------------------+
|  18.80  |   55   |  20.00  |   51   | 2015-01-19 22:10:01 |
|  18.80  |   55   |  20.10  |   50   | 2015-01-19 22:15:01 |
|  18.80  |   55   |  20.00  |   51   | 2015-01-19 22:20:01 |
+---------+--------+---------+--------+---------------------+

的问候, 弗雷德里克

1 个答案:

答案 0 :(得分:3)

你需要做2个子查询并加入它们:

select [temp_11], [hum_11], [temp_21], [hum_21], sensor11.sampleTime
(
    -- get sensor 11 details
    select temp as [temp_11], hum as [hum_11], sampleTime
        from tempData
        where sensorId = 11
) sensor11
inner join
(
    -- get sensor 21 details
    select temp as [temp_21], hum as [hum_21], sampleTime
        from tempData
        where sensorId = 21
) sensor21 on sensor11.sampleTime = sensor21.sampleTime

或稍微整洁,自我加入:

select
    sensor11.temp as [temp_11],
    sensor11.hum as [hum_11],
    sensor21.temp as [temp_21],
    sensor21.hum as [hum_21],
    sensor11.sampleTime
from tempData sensor11
inner join tempData sensor21 on sensor11.sampleTime = sensor21.sampleTime
    and sensor21.sensorId = 21
where sensor11.sensorId = 11

如果您想要包含其他传感器,请继续添加join s:

select
    sensor11.temp as [temp_11],
    sensor11.hum as [hum_11],
    sensor21.temp as [temp_21],
    sensor21.hum as [hum_21],
    sensor31.temp as [temp_31], -- add
    sensor31.hum as [hum_31], -- add
    sensor11.sampleTime
from tempData sensor11
inner join tempData sensor21 on sensor11.sampleTime = sensor21.sampleTime
    and sensor21.sensorId = 21
inner join tempData sensor31 on sensor11.sampleTime = sensor31.sampleTime -- add
    and sensor31.sensorId = 31 -- add
where sensor11.sensorId = 11