gpt4 book ai didi

sql - row_number() 如何工作?

转载 作者:行者123 更新时间:2023-12-02 08:42:58 28 4
gpt4 key购买 nike

我正在搜索删除表中的重复条目,我看到了如下示例:

CREATE TABLE Suppliers
(
Id int identity (1,1),
CompanyTitle nvarchar(1000),
ContactName nvarchar(100),
LastContactDate datetime
)

INSERT Suppliers VALUES (N'Melody Music Instruments',N'James Manning', '20090623 10:15')
INSERT Suppliers VALUES (N'Blue Jazz',N'Mike Clark', '20090720 15:40')
INSERT Suppliers VALUES (N'Top Music',N'Katy Swan', '20090827 18:00')
INSERT Suppliers VALUES (N'Blue Jazz',N'Mike Clark', '20090806 10:00')
INSERT Suppliers VALUES (N'Melody Music Instruments',N'James Brown', '20080121 11:20')
INSERT Suppliers VALUES (N'Top Music',N'Katy Perry', '20090825 14:00')
INSERT Suppliers VALUES (N'Top Music',N'Katy Perry', '20090825 14:00')


WITH Duplicate AS
(
SELECT
RN = ROW_NUMBER() OVER (PARTITION BY CompanyTitle ORDER BY LastContactDate DESC)
FROM Suppliers
)
delete from Duplicate where RN > 1

CTE 返回类似的内容,然后如果值大于 1,我将其删除。

RN
--
1
2
1
2
1
2
3

我不明白的是它如何理解将删除哪个条目。它只是通过这个例子返回重复的条目计数。

实例:http://www.sqlfiddle.com/#!3/d84b6/20

最佳答案

您的示例表是一个堆(意味着它没有聚集索引)。

如果查看示例的执行计划,您会看到 Bmk1000 在叶级表扫描的输出列列表中,并且该列在计划直到 DELETE 运算符。

Bmk1000 是一个书签,它唯一标识行所在的位置(堆的行标识符包含行的 File:Page:Slot 的位置),因此它可以被 DELETE 运算符以定位所需的行。

如果您的表有聚集索引,您可能会看到聚集索引键列以这种方式传递,而不是书签。

关于sql - row_number() 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14967788/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com