select
dp.profit_id,
dp.profit_date,
dp.profit,
sum(dp.profit) over (order by dp.profit_date)as cumulative_profit
from
daily_profits dp
order by
dp.profit_date;
select
部分:dp.profit_id:选择 “daily_profits” 表中的 “profit_id” 列,这一列可能是用于标识利润记录的唯一标识符。dp.profit_date:选择 “daily_profits” 表中的 “profit_date” 列,代表利润数据对应的日期。dp.profit:选择 “daily_profits” 表中的 “profit” 列,即每日的利润数值。sum(dp.profit) over (order by dp.profit_date) as cumulative_profit:使用窗口函数计算累计利润。sum(dp.profit) 是对 “profit” 列进行求和,over (order by dp.profit_date) 表示按照 “profit_date” 列的顺序进行计算,as cumulative_profit 是给这个计算结果取别名为 “cumulative_profit”,也就是累计利润。from
部分:from daily_profits dp
表示数据来源于 “daily_profits” 表,并给该表取别名为 “dp”,方便后续引用。order by
部分:order by dp.profit_date
表示最终查询结果按照 “profit_date” 列进行排序,即按日期顺序展示数据。
SELECT
a.profit_id,
a.profit_date,
a.profit,
SUM(b.profit) AS cumulative_profit
FROM
daily_profits a
-- 自连接,关联日期小于等于当前行的记录
JOIN
daily_profits b ON a.profit_date >= b.profit_date
GROUP BY
a.profit_id, a.profit_date, a.profit
ORDER BY
a.profit_date;
SELECT a.profit_id, a.profit_date, a.profit, SUM(b.profit) AS cumulative_profit
:选择要返回的列。a.profit_id
、a.profit_date
和a.profit
分别是从表a
(即daily_profits
)中选择的利润 ID、利润日期和当日利润。SUM(b.profit) AS cumulative_profit
计算从开始日期到当前日期的累计利润,并将其命名为cumulative_profit
。FROM daily_profits a
:指定数据源表为daily_profits
,并给它一个别名a
。JOIN daily_profits b ON a.profit_date >= b.profit_date
:这是一个自连接操作,将表a
与自身连接(别名为b
),连接条件是a
表中的日期大于等于b
表中的日期。这样可以获取到当前日期及之前所有日期的利润数据,用于计算累计利润。GROUP BY a.profit_id, a.profit_date, a.profit
:按profit_id
、profit_date
和profit
进行分组,确保每个日期的利润和累计利润都能正确计算。ORDER BY a.profit_date
:按profit_date
对结果进行排序,以日期顺序展示数据。