我有一张表,其中有大约200万条记录,其中有大约70000条记录有重复的交易ID。
1.这里只有重复的交易ID记录我想考虑上次更新月份的记录( FP )。
2.仅当上次更新月份( FP )为等于时,才需要选择来源 = 'MDM'的记录。
3.交易ID可以重复多次
重要的是我们只需考虑重复的交易ID。
我试过将Deal ID's分组并且记录数大于 1 ,并通过内部联接来计算记录数>< 1存储在其他表中,并使用Rank,但在这里我无法检索所需的记录。
输出应该是这样的
SQLFiddle用于样本数据
答案 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
答案 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)