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

如何按datetime分组并聚合两行数据求和以生成柱状图数据

按日期分组求和的SQL实现方案

针对task_project_field表中日期(dateValue字段)和数值(stringValue字段)分存为不同记录的情况,以下两种方法可以生成柱状图所需的X轴(日期分组)和Y轴(数值求和)数据:

方法1:用CTE+条件聚合配对数据后求和

WITH task_data AS (
    SELECT
        task_id,
        -- 提取每个任务对应的日期
        MAX(CASE WHEN field_name = 'dateValue' THEN date_value END) AS date_value,
        -- 提取每个任务对应的数值并转换为数值类型
        CAST(MAX(CASE WHEN field_name = 'stringValue' THEN string_value END) AS DECIMAL(10,2)) AS num_value
    FROM task_project_field
    WHERE field_name IN ('dateValue', 'stringValue')
    GROUP BY task_id
    -- 过滤掉缺失日期或数值的无效任务
    HAVING date_value IS NOT NULL AND num_value IS NOT NULL
)
SELECT
    date_value AS x_axis_date,
    SUM(num_value) AS y_axis_sum
FROM task_data
-- 按日期分组求和
GROUP BY date_value
-- 按日期排序,保证柱状图顺序正确
ORDER BY date_value;

逻辑说明

  1. 先通过CTEtask_data按任务ID分组,把每个任务的日期和数值从两条记录中整合到同一行;
  2. 过滤掉没有日期或有效数值的任务数据;
  3. 最后按日期分组,对每个日期下的所有任务数值求和,得到柱状图需要的分组数据。

方法2:自连接关联日期与数值记录后求和

SELECT
    t1.date_value AS x_axis_date,
    -- 对同一日期下的所有数值求和
    SUM(CAST(t2.string_value AS DECIMAL(10,2))) AS y_axis_sum
FROM task_project_field t1
-- 自连接匹配同一任务的日期和数值记录
JOIN task_project_field t2
    ON t1.task_id = t2.task_id
    AND t1.field_name = 'dateValue'
    AND t2.field_name = 'stringValue'
-- 按日期分组
GROUP BY t1.date_value
ORDER BY t1.date_value;

逻辑说明

直接将表自连接,让存储日期的记录(t1)和存储数值的记录(t2)通过任务ID关联,确保配对的是同一任务的数据,之后按日期分组求和即可。

注意事项

  • 如果stringValue中存在非数值内容,建议用TRY_CAST替代CAST,避免因转换失败导致查询报错;
  • 若同一任务存在多条日期或数值记录,需根据实际业务需求调整聚合函数(比如用SUM替代MAX提取数值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 12:27:14