使用条件检索SQL中的上次更新记录

时间:2015-04-21 09:53:15

标签: sql sql-server sql-server-2008

我有一张表,其中有大约200万条记录,其中有大约70000条记录有重复的交易ID。
1.这里只有重复的交易ID记录我想考虑上次更新月份的记录( FP )。
2.仅当上次更新月份( FP )为等于时,才需要选择来源 = 'MDM'的记录。
3.交易ID可以重复多次 重要的是我们只需考虑重复的交易ID。

Sample Data 我试过将Deal ID's分组并且记录数大于 1 ,并通过内部联接来计算记录数>< 1存储在其他表中,并使用Rank,但在这里我无法检索所需的记录。

输出应该是这样的

enter image description here SQLFiddle用于样本数据

3 个答案:

答案 0 :(得分:2)

看起来像基本的ROW_NUMBER案例,不是吗?

select * 
from (
  select *,
    [rank] = ROW_NUMBER() OVER(
      partition by deal
      order by fp desc, case when source = 'MDM' then 0 else 1 end asc
    )
  from src
) ranked
where [rank] = 1

http://sqlfiddle.com/#!6/46b96/12

答案 1 :(得分:0)

尝试一下

Select * from [table] 
where DealId in(
Select DealId from [table]
Group by DealId 
Having count(DealId) > 1)
where source = 'MDM'

这应该给你带有重复dealIds和source ='mdm'

的所有记录

答案 2 :(得分:0)

如果不存在具有相同交易的较新者,请选择一行:

select * from tablename t1
where not exists (select 1 from tablename t2
                  where t1.deal = t2.deal
                    and t2.fp > t1.fp)