Mysql 如何使用SQL计算累积值
我哪里出了问题?cum_duration应产生活动持续时间的累积值,但它返回的值与活动持续时间相同。如何获得累积值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)
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日期