更新行中具有相同ID但不同数据的数据

时间:2017-12-14 06:59:34

标签: sql sql-server database

我的记录具有相同的ID但两行中的数据不同 更新最终结果应该是数据中存在的该ID的最后一条记录。 示例

ID | Name | PermanentAddrss | CurrentLocation
1  |  R1  | INDIA           |    USA
1  |  R1  | INDIA           |    UK

现在ID 1将加载到数据库中的记录

1|R1|INDIA|UK

如何在SQL Server中为多条记录完成此操作?

2 个答案:

答案 0 :(得分:2)

请理解SQL服务器不按数据插入顺序存储或获取数据,因此要查找最新/最后一条记录,您应该有一些方法来订购记录。 这通常是last_modified_date之类的时间戳列。您当前的表是缓慢更改维度类型2的主要候选者;你应该考虑实施它。 请参阅Kimball网站上的 explanation

如果您确实没有受到任何订单的影响,只需要为每个ID添加一行,您可以尝试以下查询。

select 
ID, 
Name,
PermanentAddress,
CurrentLocation
from
(select
*,
row_number() over(partition by id order by (select null)) r
from yourtable)t
where r=1

答案 1 :(得分:1)

您可以通过以下方式识别最新的ID值:

SELECT B.ID, A.NAME, A.PERMANENTADDRS, A.CURRENTLOCATION
FROM
(SELECT ID, NAME, PERMANENTADDRS, CURRENTLOCATION, MAX(RNUM) AS LATEST_ID FROM
    (SELECT ID, NAME, PERMANENTADDRS, CURRENTLOCATION, ROW_NUMBER() OVER (PARTITION BY ID) AS RNUM FROM YOUR_TABLE)
GROUP BY ID, NAME, PERMANENTADDRS, CURRENTLOCATION) A
INNER JOIN
YOUR_TABLE B
ON A.LATEST_ID = B.ID;

这将获取给定ID值的最后一个填充记录。如果最新记录的逻辑不同,则可以将其适当地合并到查询中。