2016-06-13 109 views
0

我最近用MySQL創建了我的第一個數據庫。我使用它每十分鐘從十個不同的傳感器記錄數據。每個傳感器都有一個唯一的ID,同時讀出所有傳感器,以便有十個條目獲得相同的時間戳。該數據庫是這樣的:MySQL - 在同一行中具有相同時間戳的所有條目

sensor_id |  timestamp  | sensor_value | 
    1 | 2016-06-13 20:40:00 |  19.1 | 
    2 | 2016-06-13 20:40:00 |  20.1 | 
    3 | 2016-06-13 20:40:00 |  21.5 | 
         . 
         . 
         . 
    10 | 2016-06-13 20:40:00 |  18.7 | 
    1 | 2016-06-13 20:50:00 |  19.4 | 
    2 | 2016-06-13 20:50:00 |  20.2 | 
    3 | 2016-06-13 20:50:00 |  22.1 | 
         . 
         . 
         . 
    10 | 2016-06-13 20:50:00 |  17.9 | 
         . 
         . 
         . 

現在我想以這樣的方式,我得到的每一個時間戳的行的數據與導出包含十個傳感器爲TEN下列:

    | 1 | 2 | 3 | ... | 10 | 
2016-06-13 20:40:00 | 19.1 | 20.1 | 21.5 | ... | 18.7 | 
2016-06-13 20:50:00 | 19.4 | 20.2 | 22.1 | ... | 17.9 | 
           . 
           . 
           . 

我試圖使用GROUP_CONCAT,幾乎找到了我正在尋找的東西。但是,這給了我所有的傳感器值一列以逗號分隔的列表

 timestamp  | GROUP_CONCAT(sensor_value) | 
2016-06-13 20:40:00 | 19.1,20.1,21.5,...,18.7 | 
2016-06-13 20:50:00 | 19.4,20.2,22.1,...,17.9 | 
          . 
          . 
          . 

不幸的是,有時一個傳感器未能提供其價值和沒有條目添加到我的數據庫。因此,有時只有九個值具有相同的時間戳。而逗號分隔列表不能告訴我哪個傳感器丟失了。這就是爲什麼我需要每個唯一的傳感器ID一列。有沒有辦法做到這一點?

我試圖通過瀏覽堆棧溢出來解決這個問題,但由於我對MySQL和數據庫相當新,所以我沒有設法解決我的問題,但沒有發佈新的問題。如果在對不起之前已經提出並回答了問題,並且如果有人將我轉向正確的方向,我會很高興。

謝謝!

+1

[MySQL的數據透視表(http://stackoverflow.com/questions/7674786/mysql-pivot-table) – Schleis

+0

搜索能進行旋轉表的可能的複製。 –

回答

0

只需使用條件彙總:

select timestamp, 
     max(case when sensor_id = 1 then sensor_value end) as sensor_1, 
     max(case when sensor_id = 2 then sensor_value end) as sensor_2, 
     . . . 
from t 
group by timestamp; 
相關問題