You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将批量时间序列表中的行数据转换为列维度?

可以用原生SQL实现需求转换

这里提供两种常用的实现方式,适配不同的SQL环境:

方法1:自关联查询

通过将表与自身关联,匹配相同time维度下的特定technology记录,将其value提取为新列。

假设你的表名为time_series_data,要转换的目标technology为'technology 2',新列命名为tech2_value,SQL语句如下:

SELECT 
    t1.id,
    t1.technology,
    t1.time,
    t1.value,
    t2.value AS tech2_value
FROM 
    time_series_data t1
LEFT JOIN 
    time_series_data t2 
        ON t1.time = t2.time 
        AND t2.technology = 'technology 2';

使用LEFT JOIN可以确保所有原始行都被保留,若某一时间点没有technology 2的记录,tech2_value会显示为NULL,完全符合你“同一time标记的所有行填充对应value”的要求。

方法2:窗口函数实现(适用于支持窗口函数的SQL方言)

如果你的数据库支持窗口函数(比如MySQL 8.0+、PostgreSQL、SQL Server等),可以用更简洁的写法:

SELECT 
    id,
    technology,
    time,
    value,
    MAX(CASE WHEN technology = 'technology 2' THEN value END) OVER (PARTITION BY time) AS tech2_value
FROM 
    time_series_data;

原理是通过PARTITION BY time按时间分组,用CASE筛选出目标technology的value,再通过MAX()函数将该值填充到同一时间组的所有行中(因为同一时间组内目标technology的value唯一,MAX不影响结果)。这种方式无需自连接,性能更优。

如果需要同时转换多个特定technology,只需在SELECT语句中添加对应的CASE分支(窗口函数方式)或增加关联条件(自关联方式)即可。

内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 10:08:06