清除具有较低SeqNo的项目的数据库结果集

时间:2013-02-22 19:11:01

标签: sql-server

我有一个返回如下内容的查询:

ID    FieldName    Value        SeqNo
--    ---------    -----        -----
45    {AAA}        Something    1 
12    {BBB}        Something2   2
34    {CCC}        Something3   3 
23    {BBB}        Something4   4

我需要清除所有具有FieldNames的记录,这些记录已经存在于结果集中但具有更高的序列号。 因此,在上面的示例中,我的结果集不应返回ID = 12。

更新 我知道我可以通过FieldName / SeqNo将这个查询加入到自己的副本中,但这是一个相当密集的查询,再次调用它可能在优化方面成本太高

3 个答案:

答案 0 :(得分:1)

使用'row_number()'和'cte'

;with cte as (
select id, fieldname, value, seqnum, row_number() over (partition by fieldname order by seqnum desc) rn
from table
)
Select id, fieldname, value, seqnum
From cte
Where rn=1

答案 1 :(得分:0)

select ID, FieldName, Value, SeqNo
from tablename
group by FieldName, Value, SeqNo, ID
having max(SeqNo)

答案 2 :(得分:0)

Select  ID, FieldName, Value, SeqNo
From    [tableExample] t
Where   Not Exists (Select  1
                    From    [tableExample] t2
                    Where   t.fieldName = t2.fieldName
                    And     t.SeqNo < t2.SeqNo