1

我有一个小问题。我的问题是我有一个包含传感器数据的单列表。每三行代表一个新样本。我现在的目标是将每第三行转换为一个单独的列,如 3 x N 矩阵。我不知道我的 N 有多大。是否有可能用 SQL 做到这一点?

--VALUES--
sensor_sampleA1
sensor_sampleA2
sensor_sampleA3
sensor_sampleB1
sensor_sampleB2
sensor_sampleB3
...
... sensor_sampleN1 sensor_sampleN2 sensor_sampleN3
_


我要这个。

--TARGET_TABLE--
sampleA1 sampleB1 sampleC1 ... ... sampleN1
sampleA2 sampleB2 sampleC2 ... ... sampleN2
sampleA3 sampleB3 sampleC3 ... ... sampleN3

更新:我以上面的数字 3 为例。我有 11 个传感器,每秒给我 11 个值。我的列是:sensor_data_id、axis、source、type、value 和 sample_id。

数据库的图片

4

3 回答 3

0

如果您使用的是 SQL Server,我建议您使用 PIVOT。我认为有一种方法可以使用CROSSTAB在 PostgreSql 中复制 PIVOT,但我对它还不够熟悉,无法尝试编写它。

如果您想尝试转换它,这是 MSSQL 版本:

SELECT
    sample_id,
    source,
    [la_x],[la_y],[la_z],
    [gy_x],[gy_y],[gy_z],
    [st_a],[rv_r],[rv_p],
    [rv_y],[rv_m]
FROM
(
    SELECT  
        CONCAT(
            CASE type
                WHEN 'linear acceleration' THEN 'la'
                WHEN 'gyroscope' THEN 'gy'
                WHEN 'stepcounter' THEN 'st'
                ELSE 'rv'
            END, '_',
            ISNULL(LEFT(axis,1),'a')) 'dtype',
        value 'value',
        sample_id 'sample_id',
        source 'source'
    FROM
        sensortable
) sq
PIVOT
(
    SUM(value) FOR
    dtype IN
        ([la_x],[la_y],[la_z],
        [gy_x],[gy_y],[gy_z],
        [st_a],[rv_r],[rv_p],
        [rv_y],[rv_m])
) pv
于 2018-01-08T22:43:38.490 回答
0

这是可能的解决方案之一。我使用了前 4 种度量类型 - 这应该说明它。

select
     sample_id
    ,max(case when axis = 'X' and type = 'linear acceleration' then value else null end) as sensor1
    ,max(case when axis = 'Y' and type = 'linear acceleration' then value else null end) as sensor2
    ,max(case when axis = 'Z' and type = 'linear acceleration' then value else null end) as sensor3
    ,max(case when axis = 'X' and type = 'gyroscope          ' then value else null end) as sensor4
from have
group by sample_id
于 2018-01-08T21:13:43.957 回答
0

这是一个想法 - 首先使用行号对数据进行分组,然后您可以将结果选择到临时表中或用作子查询:

SELECT sensor_sample, ((ROW_NUMBER() OVER (ORDER BY sensor_sample) -1) / 3) AS sensor_group_id
FROM sensor_table
于 2018-01-08T19:40:15.057 回答