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;
結果は今
他のと同じ場所で最後の列からデータを移動(日付と最大値の行を取得)することで、この
私の問題のように見えます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;