我對使用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'過濾掉不需要的行,然後再過濾。 –