mysql时间序列数据透视表
我在一个表中有以下数据,需要获得一个透视表输出。我一辈子都搞不清楚这件事。提前谢谢 mysql表中的行mysql时间序列数据透视表,mysql,sql,pivot,pivot-table,Mysql,Sql,Pivot,Pivot Table,我在一个表中有以下数据,需要获得一个透视表输出。我一辈子都搞不清楚这件事。提前谢谢 mysql表中的行 id, timestamp, metric, value 1, 2020-10-31 02:52:02.144030, aaaa, 3 2, 2020-10-31 02:52:02.144030, tttt, 40 3, 2020-10-31 02:52:02.144030, vvvv, 6 4, 2020-10-31 02:53:01.656349, aaaa, 3 5, 2020-10-3
id, timestamp, metric, value
1, 2020-10-31 02:52:02.144030, aaaa, 3
2, 2020-10-31 02:52:02.144030, tttt, 40
3, 2020-10-31 02:52:02.144030, vvvv, 6
4, 2020-10-31 02:53:01.656349, aaaa, 3
5, 2020-10-31 02:53:01.656349, tttt, 40
6, 2020-10-31 02:53:01.656349, vvvv, 6
7, 2020-10-31 02:54:02.053597, aaaa, 3
8, 2020-10-31 02:54:02.053597, tttt, 40
9, 2020-10-31 02:54:02.053597, vvvv, 6
10, 2020-10-31 02:55:01.490467, aaaa, 3
11, 2020-10-31 02:55:01.490467, tttt, 40
12, 2020-10-31 02:55:01.490467, vvvv, 6
输出我正在寻找
timestamp, aaaa, tttt, vvvv
2020-10-31 02:52:02.144030, 3, 40, 6
2020-10-31 02:53:01.656349, 3, 40, 6
2020-10-31 02:54:02.053597, 3, 40, 6
2020-10-31 02:55:01.490467, 3, 40, 6
您可以通过使用
GROUP\u CONCAT()
和CONCAT()
函数动态地旋转,例如
SET @sql = NULL;
SELECT GROUP_CONCAT(
CONCAT(
'MAX(CASE WHEN metric = "', metric,'" THEN value END ) AS ',metric
)
)
INTO @sql
FROM ( SELECT DISTINCT metric FROM tab) t;
SET @sql = CONCAT('SELECT timestamp,',@sql,' FROM tab GROUP BY timestamp');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
考虑处理应用程序代码中的数据显示问题。我当时很忙,所以我只是在代码中完成了它。谢谢。我得坐下来想一想如何理解它。不客气@ErikSundberg