我对使用CTE
和ROW_NUMBER OVER PARTITION
时在哪里添加条件的首选位置有点困惑。哪里可以设置条件与CTE中的哪里条款使用Rownumber
我有含有下列的表:
UserID, BranchNumber, MemberDate
和MemberStatus
注意:一个构件可具有在不同位置的多个成员资格:
下面的代码给我一个少记录:17069
WITH CTE AS
(
SELECT
*
,ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY [MemberDate] DESC) AS RowNumber
FROM MemberTable
WHERE BranchNumber = '01'
)
SELECT * FROM CTE WHERE RowNumber = 1 AND MemberStatus = 'Active'
下面的代码提供了一个额外的记录:17070
WITH CTE AS
(
SELECT
*
,ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY [MemberDate] DESC) AS RowNumber
FROM MemberTable
WHERE BranchNumber = '01' AND MemberStatus = 'Active'
)
SELECT * FROM CTE WHERE RowNumber = 1
我只是困惑,为什么差异,这是正确的方式?
正确的记录量为19000
有没有首选的地方添加条件。只有一个*正确*的地方。这取决于你需要什么。我不清楚你需要什么。你想要第一个活动的项目,还是你想要第一个活动的项目? – usr
我希望所有最近的记录是'活跃'和'分支01'。 – Asynchronous
我会说使用CTE内的'WHERE'过滤掉不需要的行,然后再过滤。 –