2016-10-12 32 views
0

我有一個值存儲在這樣一個數據庫:轉換行到列的MySQL與ID(不旋轉)

ID  | Date | Value 
---------------------------------------------- 
1  | 11/20 | 1 
1  | 11/21 | 2 
2  | 11/20 | 10 
2  | 11/21 | 20 

不過,我需要的是這樣的:

Date | Value ID 1 | Value ID 2 
---------------------------------------------- 
    11/20| 1   | 10 
    11/21| 2   | 20 

所以新列可以趨勢圖(列1 =日期,列2 =值#1,列3 =值#2,列4 =值#4等)。


這裏是一個標籤查詢:

SELECT * 
FROM (
SELECT ID, _date, ESYNC_TAGSHISTORY.Val, @curRow := @curRow + 1 AS row_number 
FROM ESYNC_TAGSHISTORY 
JOIN (SELECT @curRow:=0) i 
INNER JOIN ESYNC_TAGS ON ESYNC_TAGSHISTORY.TAGID=ESYNC_TAGS.ID 
WHERE ESYNC_TAGS.NAME='I_TT_21052' AND ESYNC_TAGS.STATIONID=1 AND (_date BETWEEN now()-INTERVAL 45 MINUTE AND now())) s 
WHERE row_number mod 60 = 0; 

而且結果:

ID | Date | Value ID 1 | Row 
---------------------------------------------- 
    1 | 11/20| 1   | 1 
    1 | 11/21| 2   | 2 

編輯:

經過一些修改我的查詢看起來像這樣

SELECT * 
      FROM (
      SELECT ID, _date, ESYNC_TAGSHISTORY.Val, @curRow := @curRow + 1 AS row_number, 
      if (ESYNC_TAGS.NAME='I_TT_21052', ESYNC_TAGSHISTORY.Val, NULL) as 'I_TT_21052', 
      if (ESYNC_TAGS.NAME='I_TT_91214', ESYNC_TAGSHISTORY.Val, NULL) as 'I_TT_40011' 
      FROM ESYNC_TAGSHISTORY 
      JOIN (SELECT @curRow:=0) i 
      INNER JOIN ESYNC_TAGS ON ESYNC_TAGSHISTORY.TAGID=ESYNC_TAGS.ID 
      WHERE ESYNC_TAGS.STATIONID=1 AND (_date BETWEEN now()-INTERVAL 5 MINUTE AND now())) s 
      WHERE row_number mod 1 = 0 
      ORDER BY ID ,_date; 

結果是這樣的

SQL RESULT

我現在的問題是,從最後一列在同一地點的其他移動數據(與日期獲取的價值排隊)

編輯#2:最後備查查詢是這樣的:

SELECT _date, I_TT_21052, I_TT_40011, row_number 
      From(
      SELECT max(_date) as _date, max(I_TT_21052) as I_TT_21052, max(I_TT_40011) as I_TT_40011, @curRow := @curRow + 1 AS row_number 

           FROM (
           SELECT ID, _date, ESYNC_TAGSHISTORY.Val, 
           if (ESYNC_TAGS.NAME='I_TT_21052', ESYNC_TAGSHISTORY.Val, NULL) as 'I_TT_21052', 
           if (ESYNC_TAGS.NAME='I_TT_91214', ESYNC_TAGSHISTORY.Val, NULL) as 'I_TT_40011' 
           FROM ESYNC_TAGSHISTORY 
           JOIN (SELECT @curRow:=0) i 
           INNER JOIN ESYNC_TAGS ON ESYNC_TAGSHISTORY.TAGID=ESYNC_TAGS.ID 
           WHERE ESYNC_TAGS.STATIONID=1 AND (_date BETWEEN now()-INTERVAL 24 HOUR AND now())) s 

      GROUP BY _date)v 
      WHERE row_number mod 150 = 0; 

回答

0
select 
case when id=1 then count(Id) else 0 end) as Value1, 
case when id=2 then count(Id) else 0 end) as Value2 
from ESYNC_TAGSHISTORY 

這不是確切的,但嘗試這種查詢,你會得到結果