Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL将一列更新为不带键的最大值_Sql_Stored Procedures_Sql Server 2014 - Fatal编程技术网

SQL将一列更新为不带键的最大值

SQL将一列更新为不带键的最大值,sql,stored-procedures,sql-server-2014,Sql,Stored Procedures,Sql Server 2014,我在表格中有以下数据 ID name code number 621 eric 10PT 1 676 eric 10PT 1 679 eric 10PT 1 我需要编写一条update语句,将ID更新为该特定数据组的最大值。列不是键,整个表不包含任何键 结果: ID name code number 679 eric 10PT 1 679 eric 10PT 1 679 eric 10PT 1 我忘了补充

我在表格中有以下数据

ID  name   code    number
621 eric   10PT    1
676 eric   10PT    1
679 eric   10PT    1 
我需要编写一条update语句,将ID更新为该特定数据组的最大值。列不是键,整个表不包含任何键

结果:

ID  name   code    number
679 eric   10PT    1
679 eric   10PT    1
679 eric   10PT    1 
我忘了补充一下,表中有更多这样的组。update语句必须同时覆盖所有组


有人知道吗?

在这种情况下,我会使用
CTE
来执行
更新

Update t1
set id=t2.maxid 
from mytable t1
inner join 
(select max(id)as maxid,name, code, number from mytable group by name, code, number) t2
on t2.name=t1.name and t1.code=t2.code and t2.number=t1.number    
;WITH ToUpdate AS (
   SELECT ID, 
          MAX(ID) OVER (PARTITION BY name, code, number) AS max_ID
   FROM mytable
)
UPDATE ToUpdate
SET ID = max_ID

更新将传播到数据库中的实际记录。
CTE
使用窗口版本的
MAX
来获取每个
名称、代码、编号
组中的最大
ID
值。

我使用了子查询和交叉连接来更新ID字段

update t set id = m.mid
from myTable t 
cross apply (select max(id) as mid from myTable) m

您正在使用哪些RDBMS?此外,哪些字段确定特定组?MSSQL server 2014。ID、名称、代码和编号确定特定的组。表中有更多的列,但这些列决定了组。如果有帮助,请接受我的回答?我将在以后删除此注释。此查询中没有组确定。因此,如果一个组存在更多,它将失败。与另一个查询一样,它没有组确定。这很好,就像一个缺陷。谢谢分区中的某些列可以包含空值,这将创建其他分区。我不想那样。我不知道如何忽略PARTITION BY语句中的空值。有什么想法吗?@ImperialBert您想如何处理
NULL
s?完全无视他们?然后包括一个
WHERE
子句以过滤掉这些记录。否则,您能否指定一个用例以及预期结果?感谢您的快速回复!我想忽略空值。例如,如果名称和代码相同,但数字为NULL,则此分区仍应更新为max_ID。我希望这有意义?@ImperialBert如果您有
(名称、代码、数字)=('eric',10PT',1),('eric',10PT',2),('eric',10PT',NULL)
,该怎么办。在这种情况下,如何为最后一条记录找到匹配的分区?
update t set id = m.mid
from myTable t 
cross apply (select max(id) as mid from myTable) m