所以我的上一个问题被标记为重复,即使链接的答案(MySQL - Rows to Columns)与我的要求无关。该帖子指的是可能在这里不起作用的数据透视表。再次发帖。
我有一个包含以下数据的mysql表。
+-------------+---------------+---------------+--------------------+- --------------------+------------+--------------+
| identifier | sensor_map_id | sensor_log_id | device_post_log_id | sensor_component_id | logged_at | sensor_level |
+-------------+---------------+---------------+--------------------+- --------------------+------------+--------------+
| Level | 1380 | 788551 | 107392 | 2759 | 1463690100 | 38.00 |
| Temperature | 1380 | 788552 | 107392 | 2760 | 1463690100 | 300.60 |
| Level | 1381 | 788547 | 107392 | 2761 | 1463690100 | 46.00 |
| Temperature | 1381 | 788548 | 107392 | 2762 | 1463690100 | 299.50 |
| Level | 1382 | 788549 | 107392 | 2763 | 1463690100 | 45.00 |
| Temperature | 1382 | 788550 | 107392 | 2764 | 1463690100 | 299.50 |
| Level | 1383 | 100381 | 12664 | 2765 | 1454111400 | 153.00 |
| Temperature | 1383 | 100382 | 12664 | 2766 | 1454111400 | 295.20 |
| Level | 1383 | 788553 | 107392 | 2773 | 1463690100 | 38.00 |
| Temperature | 1383 | 788554 | 107392 | 2774 | 1463690100 | 300.40 |
+-------------+---------------+---------------+--------------------+---------------------+------------+--------------+
很少考虑这个数据的模式,因此每隔一行与不同的标识符和sensor_level值共享相同的数据。我想创建一个将合并共享一个sensor_map_id的行的查询,然后添加两个额外的列,分别保存来自两行的sensor_level数据,分别称为“level”和“temperature”。
格式化后,数据应该看起来像这样,行数减半,但每行有更多列。
+-------------+---------------+---------------+--------------------+- --------------------+------------+---------+
| sensor_map_id | sensor_log_id | device_post_log_id | sensor_component_id | logged_at | level | temperature
+---------------+---------------+--------------------+- --------------------+------------+--------------+--------
| 1380 | 788551 | 107392 | 2759 | 1463690100 | 38.00 | 300.60
| 1381 | 788547 | 107392 | 2761 | 1463690100 | 46.00 | 299.50
| 1382 | 788549 | 107392 | 2763 | 1463690100 | 45.00 | 299.50
| 1383 | 100381 | 12664 | 2765 | 1454111400 | 153.00 | 295.20
| 1383 | 788553 | 107392 | 2773 | 1463690100 | 38.00 | 300.40
+-------------+---------------+---------------+--------------------+---------------------+------------+-------------+
我想这很容易做到但是Mysql不是我的强项。
编辑:我不确定为什么这被标记为重复。另一个问题是询问数据透视表,这更复杂。
答案 0 :(得分:0)
假设您的表名为data
,请执行以下操作
查询将为您提供三个关键列sensor_map_id
,
level
和tempature
。您可以添加其他列
如所须。例如,如果其中一个sensor_log_id
会这样做,你可以添加tL.sensor_log_id
或
min(tL.sensor_log_id, tT.sensor_log_id)
select
tL.sensor_map_id
, tL.level
, tT.tempature
from
(
select
tL.sensor_map_id
, tL.level
from data tL
where identifier='Level'
) as tL
, (
select
tT.sensor_map_id
, tT.tempature
from data tT
where identifier='Tempature'
) as tT
where
tL.sensor_map_id = tT.sensor_map_id