sql - 使用每个外键的最大日期更新多行

标签 sql sql-server

我可以使用此语句选择要更新的行的信息:

select max(Date),F_ID from MyTable group by F_ID

F_ID 是外键。我正在尝试更新日期为最大值的不同字段。问题是可能有许多行具有相同的外键和相同的日期。如果这些是最大日期有多行,我想更新所有行。

我能得到的最接近的是:

update MyTable set
Curr = 1
where (select cast(Date as varchar(20))+cast(F_ID as varchar(10)) from MyTable) in
(select cast(max(Date)as varchar(20))+cast(F_ID as varchar(10)) from MyTable group by A_PID)

我收到此错误:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.

感谢您的帮助!

编辑:更新语句的最终查询格式,以防其他人正在寻找此格式:

update MyTable set
    Curr = 1
from MyTable t inner join
    (select F_ID,max(Date) maxDate
     from MyTable group by A_PID) t2
on t.A_PID = t2.A_PID and t.Date = t2.maxDate

感谢@Jim

最佳答案

按 FK 对行进行分组,选择 FK 并选择 Max(date) 作为 MaxDate,然后将结果连接到 FK=FK 上的同一表和 date=maxDate (希望每个 FK 的日期不相等)
如果每个 FK 的日期确实相同,请查看 another my answer

SELECT t1.* FROM Table t1
INNER JOIN 
    (SELECT F_ID, max(date) maxDate 
     FROM Table 
     GROUP BY F_ID) t2 
ON t1.F_ID=t2.F_ID AND t1.date=t2.maxDate

关于sql - 使用每个外键的最大日期更新多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19987723/

相关文章:

sql - 如何在 VB.NET 的文本框中显示数据库中的空值

c# - 列 '[Group]' 不属于表表

sql - Yii 与 sqlite 3

mysql - 添加约束、修改和约束

mysql - MySQL 中的 SQL 分组

sql-server - 连接的条件过滤

sql - SQL 查询中的 uniqueidentifier 显示转换失败错误

sql - 带加密的同步框架

mysql - 如何创建Mysql动态带条件查询语句

sql - 将列数据拆分为多行