如何将查询结果合并为新列?

时间:2019-07-25 21:47:07

标签: jquery mysql sql

我有一个表,其中包含200个不同的传感器和相应的传感器值。我想创建一个查询,其中不同的传感器值在不同的列中。

我已经尝试过加入并合并它并没有达到预期的效果。

从measuredValue中选择*; //简化


  

| sensorId |值|

     

| 6 | 110 |

     

| 6 | 120 |

| 6 | 180 |

| 8 | 250 |

| 8 | 280 |

| 8 | 290 |


目标

  
    
         

|传感器6 | sensor8 |

         

| 110 | 250 |

         

| 120 | 280 |

         

| 180 | 290 |

         
  

PS:传感器的行始终相等。表格中还有时间戳列。我认为放在这里没关系。

2 个答案:

答案 0 :(得分:0)

您可以加入时间戳。假设您的传感器每小时节省一次测量。你可以

SELECT 
    DATE_FORMAT(sensor6.timestamp, '%Y-%m-%d-%H'), 
    sensor6.value as sensor6, 
    sensor8.value as sensor8
FROM
    sensorMeasures sensor6
JOIN
    sensorMeasures sensor8 ON 
        DATE_FORMAT(sensor6.timestamp, '%Y-%m-%d-%H') = 
        DATE_FORMAT(sensor8.timestamp, '%Y-%m-%d-%H')
WHERE 
    sensor6.sensorId = 6
    AND sensor8.sensorId = 8

通过加入时间戳,您将获得一张包含来自同一日期/时间的所有传感器数据对的线表。 这两个where子句只是选择右行(第一个传感器数据来自第6个传感器,第二个传感器数据来自第8个传感器。

当然,您可以更改DATE_FORMAT格式以匹配该数据库中存储数据的频率。

答案 1 :(得分:0)

我的解决方案基于这样的想法,即有一个等级可以分配传感器值。 要测试的数据

CREATE TABLE table1
(`sensorId` int, `Value` int)
;

INSERT INTO table1
(`sensorId`, `Value`)
VALUES
(6, 110),
(6, 120),
(6, 180),
(8, 250),
(8, 280),
(8, 290),
 (9, 250),
(9, 280),
(9, 290)
;

然后我用这个查询

Select Value6,Value8,Value9 
From
 (SELECT   Value as Value6,
      @curRank := @curRank + 1 AS rank
  FROM      table1 t1, (SELECT @curRank := 0) r
  Where sensorId =6
  ORDER BY  Value) t1
inner join
  (SELECT   Value as Value8,
      @curRank2 := @curRank2 + 1 AS rank
  FROM      table1 t2, (SELECT @curRank2 := 0) r
  Where sensorId =8
  ORDER BY  Value) t2 on t1.rank = t2.rank
inner join
  (SELECT   Value as Value9,
      @curRank3 := @curRank3 + 1 AS rank
  FROM      table1 t2, (SELECT @curRank3 := 0) r
  Where sensorId =9
  ORDER BY  Value) t3 on t1.rank = t3.rank;

结果

Value6  Value8  Value9
 110    250     250
 120    280     280
 180    290     290

这取决于每个sensorId总是有相同数量的行。 这也可以在存储过程中使用,就像我在这里所做的一样 how to make row values to column dynamically in mysql 但是在这里,您只需要光标从1到200的循环即可。

说实话,我会选择一个*从table1中按SensorId,Value排序,并在jquer.success中使用结果。