如何按组删除SQL Server中除第一行和最后一行之外的所有行?

5 sql sql-server group-by sql-delete

我有这样的数据

Id Name AuthorId 
----------------
1  AAA  2
2  BBB  2
3  CCC  2
4  DDD  3
5  EEE  3
Run Code Online (Sandbox Code Playgroud)

我需要一个查询,如果有超过 2 个,除了第一个和最后一个,它将按组 AuthorId 删除所有行。

比如上面的数据中,应该删除第二行,因为,对于AuthorId = 2,我有3行,但是对于AuthorId = 3,什么都不会被删除

Ser*_*erg 10

Row_number() 两次并删除非终端

delete t
from (
   select *,
      row_number() over(partition by [AuthorId]  order by [Id]) n1,
      row_number() over(partition by [AuthorId]  order by [Id] desc) n2
   from tablename
) t
where n1 > 1 and n2 > 1
Run Code Online (Sandbox Code Playgroud)