2016-10-12 7 views
0

私はこのようなデータベースでvalueストアを持っている:変換行(ピボットない)

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 

EDITここ


は、単一のタグのためのクエリです
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

私の問題のように見えますEDIT#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 

これは正確ではありませんが、この種のクエリを試してみると、結果は

関連する問題