我在一条记录中有以下数据,我想更新同一表中的YTD合计,不确定如何编写此SQL

实际表

ID      Date        Total     YTD_Total
123   01/01/2022     50          
123   02/01/2022     25          
123   08/01/2023     60          
123   09/01/2023     50          
123   10/01/2023     20

预期结果

ID      Date        Total     YTD_Total
123   01/01/2022     50          50
123   02/01/2022     25          75
123   08/01/2023     60          60
123   09/01/2023     50          110
123   10/01/2023     20          130

推荐答案

我很少需要update条语句,但这是有效的,并返回您预期的结果.你只需要在你的Windows函数中同时按ID和年份进行分区.

update my_table a
 set ytd_total = (select running_total
  from (
   select
    id, 
    order_date, 
    sum(total) over (partition by id, extract(year from order_date) order by order_date) as running_total
   from my_table
  )b
where a.id = b.id
 and a.order_date = b.order_date
);
   
select *
from my_table
ID ORDER_DATE TOTAL YTD_TOTAL
123 01-JAN-22 50 50
123 01-FEB-22 25 75
123 01-AUG-23 60 60
123 01-SEP-23 50 110
123 01-OCT-23 20 130

fiddle

Sql相关问答推荐

SQL—如何在搜索的元素之后和之前获取元素?

收到%1、%2或%2邮箱的唯一客户

使用DatePart函数对日期时间值进行分组

从包含PostgreSQL中的JSON值的列中提取列表或目录

缺少日期标识

从JSON值数组创建扁平数组Athena

其中使用表名作为;行值;记录?

根据具有特定值的 ID 创建自定义组

SQL 如何根据当前事件和下一个事件确定操作的持续时间?

SQL Server:时态表并在运行时添加计算列

JSON对象查询SQL服务器

如何创建一个递归计数器来查找一个元素有多少父级和子级?

SQL获取两个日期范围之间的计数

如何将 CONCATENATED 值与临时表中的值匹配

如何获得上个月和下个月之间的销售额差异

如何防止 SQL 中的负收入值并将其重新分配到接下来的月份?

SELECT 用于 Parent、Children 和 ORDER BY [Order] 列

SQL 查询以填充单个列中的所有值

使用 JSON_BUILD_OBJ 从 Postgres 返回 JSON

Amazon Redshift - 子计划的哈希表不存在