删除多行,如果多行,则忽略所有行,并在SQL中保留最后一行

时间:2013-12-28 07:21:26

标签: sql-server-2008

Input Image

我有这种类型的数据。我想要InqNo唯一且来自多个InqNo最后一行的数据(对于InqNo 84,它只来自三行中的一行Conversationid为175)。最后输出就像这样。

我想在SQL中进行简单的查询。

Output Image

2 个答案:

答案 0 :(得分:0)

试试这个

with cte as (
  select [foo], [bar], 
     row_number() over (partition by column1, column2 order by column3 ) as [rn]
  from table
)
delete cte where [rn] > 1

答案 1 :(得分:0)

一种可能的解决方案是使用row_number()排名功能:

;with tblDel as
(
    select  row_number() over (partition by InqNo order by conversionId desc) as rn
            , tbl.*
    from    tbl 
)

delete tblDel
where rn > 1

row_number()为分区中的每一行分配唯一的序号(分区由具有相同InqNo的行组成),每个分区中的最后一行始终分配1(在分区行内按{降序排序} {1}})。将删除其分区中不是最后一行的所有行(converionId大于1的行。)

这是SQL Fiddle