【发布时间】:2016-10-12 20:23:10
【问题描述】:
我在这样的数据库中有一个值存储:
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;
结果如下所示
我现在的问题是将数据从最后一列移到与另一列相同的位置(使值与日期对齐)
编辑#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;
【问题讨论】:
标签: mysql row multiple-columns