SQL Server - 使用 max 和 group by 更新语句

标签 sql sql-server tsql

我有一个 SQL Server 表,其中包含这样的列,但只填充了 Salary_ID 列:

Name: Salary
Salary_ID, TotalAmount

我有另一个具有这种格式的 SQL Server 表,并且填充了所有列:

Name: SalaryImport
Row_ID, Salary_ID, Amount

我正在尝试使用每个 salary_id 的最大 row_id 更新 Salary 表。目前,SalaryImport 中的每个 Salary_ID 都有很多实例,我只关心最近的一个,它由较高的数字 row_id 表示。

关于如何做到这一点的任何提示?我想我会运行一个 SQL 语句,但它分组太多(我可以从组中删除数量,因为它在选择中!):

select max(Row_ID), Salary_ID, Amount
from SalaryImport e
group by  Row_ID, Amount

最佳答案

使用ROW_NUMBER 窗口函数

;with cte as
(
select row_number() over(partition by Salary_ID order by Row_ID desc) as rn,*
From yourtable
)
Update S
Set TotalAmount = c.Amount
From Salary s join cte c on s.Salary_ID = c.Salary_ID
Where RN = 1

关于SQL Server - 使用 max 和 group by 更新语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40489987/

相关文章:

SQLite 慢选择查询 - 如何让它更快

c# - 跟踪 MSSQL 2008 表更改,最好的方法是什么?

SQL Server 大容量插入跳过主键冲突

sql-server - SQL Server : COLLATE CS->CI performance vs UPPER

mysql - SQL:将每个 ID 的值合并到一个变量中

MySQL:有没有办法从结果中消除重复的条目

sql - 如何编写sql查询来得到这个结果

sql-server - SQL Server 如果存在

sql-server - 如何回滚已经提交的事务?

sql - 如何将字符串拆分为 View 的列?