我一直在尝试重写以下查询。
Select distinct A.Account
from SourceTable A
where A.ActivityDate = ( select MAX(ActivityDate)
from SourceTable B
where b.Account = A.Account )
and A.Status = 'M'
我转到了CTE:
;With TableCTE as
( Select Account,
row_number() Over (partition by Account order by ActivityDate desc) as Rn
From SourceTable
Where Status = 'M')
Select Account From TableCTE Where Rn = 1
我希望这些查询具有相同的结果,但是,第一个获得大约170k行,第二个获得大约380k(不,它不产生重复)。
任何想法我为什么得到不同的金额?
答案 0 :(得分:3)
您在不同的地方应用A.Status = 'M'
条件:
在查询1中,您要求的行中包含最高ActivityDate
和Status = 'M'
在查询2中,您要求 ActivityDate
Status = 'M'
行最高的行
你的CTE查询的直接SQL等价物是:
Select distinct A.Account
from SourceTable A
where A.ActivityDate = ( select MAX(ActivityDate)
from SourceTable B
where b.Account = A.Account
and b.Status = 'M'
)
and a.Status = 'M'
(假设ActivityDate
每个Account
)