Sql 是否可以使用group by删除一定数量的行?
所以我在一张叫做“公园”的桌子和另一张叫做“水源”的桌子里。这个想法是在公园的每一行中说出我有多少“水源”,并在第二张表中创建这些线。当我将Park的值更改为一个较小的数字(比如我有5个,现在我想有3个)时,我需要删除最后2个“Park”的“water source”的“last”行 我需要这样做Sql 是否可以使用group by删除一定数量的行?,sql,sql-server,tsql,sql-delete,Sql,Sql Server,Tsql,Sql Delete,所以我在一张叫做“公园”的桌子和另一张叫做“水源”的桌子里。这个想法是在公园的每一行中说出我有多少“水源”,并在第二张表中创建这些线。当我将Park的值更改为一个较小的数字(比如我有5个,现在我想有3个)时,我需要删除最后2个“Park”的“water source”的“last”行 我需要这样做 BEGIN declare @x int; set @x = 1; while @x > 0 BEGIN delete top (@diff
BEGIN
declare @x int;
set @x = 1;
while @x > 0
BEGIN
delete top (@diff) from [WaterSource]
where [IdView] = @IdView
order by [Park] DESC;
set @x = @@ROWCOUNT;
END
END
我不知道该怎么做,因为第二个表中的唯一参数是IdView,我只想按Park Id desc对“Park”顺序的所有行进行“分组”,并删除所有行
因此,我的想法是,如果我将parks number更改为1,则带有idPark 2的行应全部删除,Park 2也将删除。我总是从最后一个删除到第一个。根据提供的示例,我假设SQL Server是数据库引擎。我的解决方案的关键是创建一个临时表,其中包含由窗口函数row_number()创建的列组或行号列(有关窗口函数的详细信息,请参见此处:) 有许多方法可以自动执行此操作,以便用最相关的值填充这两个变量。您可能希望使用更新后触发器来查询已删除表中的停车表id 只有在WaterSources表中的id列是唯一的情况下,此解决方案才有效。因此,您需要将小提琴中的“插入到水道”更改为以下内容:
INSERT INTO WaterSources VALUES (1, 1, 37);
INSERT INTO WaterSources VALUES (2, 1, 37);
INSERT INTO WaterSources VALUES (3, 1, 37);
INSERT INTO WaterSources VALUES (4, 2, 37);
INSERT INTO WaterSources VALUES (5, 2, 37);
INSERT INTO WaterSources VALUES (6, 2, 37);
共享示例数据和dbms名称park表是否包含要“保留”的行数?我已经用sql FIDLE更新了我的答案
INSERT INTO WaterSources VALUES (1, 1, 37);
INSERT INTO WaterSources VALUES (2, 1, 37);
INSERT INTO WaterSources VALUES (3, 1, 37);
INSERT INTO WaterSources VALUES (4, 2, 37);
INSERT INTO WaterSources VALUES (5, 2, 37);
INSERT INTO WaterSources VALUES (6, 2, 37);