Mysql 如何使用SQL计算累积值

Mysql 如何使用SQL计算累积值,mysql,sql,Mysql,Sql,我哪里出了问题?cum_duration应产生活动持续时间的累积值,但它返回的值与活动持续时间相同。如何获得累积值 SELECT fact_daily_summary.day_date, fact_daily_summary.day_number, fact_activity.activity_duration/3600 AS activity_duration, (SELECT SUM(fc.activity_duration)

我哪里出了问题?cum_duration应产生活动持续时间的累积值,但它返回的值与活动持续时间相同。如何获得累积值

 SELECT
      fact_daily_summary.day_date,
      fact_daily_summary.day_number,
      fact_activity.activity_duration/3600 AS activity_duration,
      (SELECT
        SUM(fc.activity_duration)/3600
      FROM fact_activity fc
      WHERE fc.fact_activity_uid = fact_activity.fact_activity_uid
      AND fc.fact_activity_uid <= fact_activity.fact_activity_uid
      GROUP BY fact_activity.fact_activity_uid
      ORDER BY fact_activity.fact_activity_uid)
      AS cum_duration,
      depth_md_msl
    FROM 
         fact_daily_summary,
         fact_activity
    WHERE fact_activity.daily_uid = fact_daily_summary.daily_uid
    AND fact_daily_summary.operation_uid = fact_operation_summary.operation_uid

我认为您只需要在子查询中使用日期。嗯,也不需要分组:

SELECT fds.day_date, fds.day_number,
       fa.activity_duration/3600 AS activity_duration,
       (SELECT SUM(fc2.activity_duration)/3600
        FROM fact_activity fc2
        WHERE fc2.fact_activity_uid = fa.fact_activity_uid AND
              fc2.day_date <= fa.day_date
       ) as cum_duration,
       depth_md_msl
    FROM fact_operation_summary fos JOIN
         fact_daily_summary fds
         ON fds.operation_uid = fos.operation_uid JOIN
         fact_activity fa
         ON fa.daily_uid = fds.daily_uid;

注意,我还修复了FROM子句以使用显式连接语法。简单规则:千万不要在FROM子句中使用逗号。

我认为您只需要在子查询中使用日期。嗯,也不需要分组:

SELECT fds.day_date, fds.day_number,
       fa.activity_duration/3600 AS activity_duration,
       (SELECT SUM(fc2.activity_duration)/3600
        FROM fact_activity fc2
        WHERE fc2.fact_activity_uid = fa.fact_activity_uid AND
              fc2.day_date <= fa.day_date
       ) as cum_duration,
       depth_md_msl
    FROM fact_operation_summary fos JOIN
         fact_daily_summary fds
         ON fds.operation_uid = fos.operation_uid JOIN
         fact_activity fa
         ON fa.daily_uid = fds.daily_uid;

注意,我还修复了FROM子句以使用显式连接语法。简单规则:不要在FROM子句中使用逗号。

从MySQL 8开始,理想情况下,累积总和是使用。您的查询可以编写如下:

SELECT
  fds.day_date,
  fds.day_number,
  fa.activity_duration / 3600 AS activity_duration,

  -- Window function here
  SUM (fa.activity_duration / 360) OVER (PARTITION BY fa.fact_activity_uid ORDER BY day_date)
    AS cum_duration,
  depth_md_msl
FROM 
  fact_daily_summary fds,
  fact_activity fa,
  fact_operation_summary fos
WHERE fa.daily_uid = fds.daily_uid
AND fds.operation_uid = fos.operation_uid

从MySQL 8开始,理想情况下,使用以下公式计算累积总和。您的查询可以编写如下:

SELECT
  fds.day_date,
  fds.day_number,
  fa.activity_duration / 3600 AS activity_duration,

  -- Window function here
  SUM (fa.activity_duration / 360) OVER (PARTITION BY fa.fact_activity_uid ORDER BY day_date)
    AS cum_duration,
  depth_md_msl
FROM 
  fact_daily_summary fds,
  fact_activity fa,
  fact_operation_summary fos
WHERE fa.daily_uid = fds.daily_uid
AND fds.operation_uid = fos.operation_uid

获取此错误查询:选择fds.day\u日期、fds.day\u编号、fa.activity\u duration/3600作为activity\u duration,从中选择SUMfc2.activity\u duration/3600。。。错误代码:1054“字段列表”中的未知列“fa.activity_duration”执行时间:0秒传输时间:0秒总时间:0.001秒我忘了告诉您fc2.day_date收到此错误查询:选择fds.day_date,fds.day_编号,fa.activity_duration/3600作为activity_duration,选择SUMfc2.activity_duration/3600作为activity_duration。。。错误代码:1054“字段列表”中的未知列“fa.activity\u duration”执行时间:0秒传输时间:0秒总时间:0.001秒我忘了告诉您fc2.day\u日期