Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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 是否可以使用group by删除一定数量的行?_Sql_Sql Server_Tsql_Sql Delete - Fatal编程技术网

Sql 是否可以使用group by删除一定数量的行?

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

所以我在一张叫做“公园”的桌子和另一张叫做“水源”的桌子里。这个想法是在公园的每一行中说出我有多少“水源”,并在第二张表中创建这些线。当我将Park的值更改为一个较小的数字(比如我有5个,现在我想有3个)时,我需要删除最后2个“Park”的“water source”的“last”行

我需要这样做

 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);