每組重複記錄我有兩列像這樣的SQL日誌表:獲取使用SQL
RegistrantID compnayID Creation date
1 1 .....
1 1
2 1
3 1
1 2
2 2
2 2
3 2 .....
我有一個存儲過程帶來的第一個記錄基於創建日期。如果兩家公司具有相同的註冊人ID,那麼它會帶來一條記錄,因此註冊1,它將成爲第一行而不是第五行,而註冊人Id2將帶來第3行,而不是第6行。我想爲第1和第5行註冊註冊,第3和第6註冊註冊第2,第4和第8註冊者註冊人ID 3.這是我的存儲過程。
ALTER PROCEDURE [dbo].[hr_ActionLog_GetList]
@Action INT = NULL,
@DateFrom DATETIME = NULL,
@DateTo DATETIME = NULL,
@CompanyID INT = NULL,
@RegistrantID INT = NULL,
@VacancyID INT = NULL,
@Language INT = 1
AS
BEGIN
WITH CTE AS
(
SELECT AL.*,
RV.Forename,
RV.Surname,
RV.Username AS RegistrantUsername,
E.Forename AS EmployeeForename,
E.Surname AS EmployeeSurname,
U.Username,
CASE
WHEN @Language = 2 THEN C.NameLang2
ELSE C.NameLang1
END AS CompanyName,
CASE
WHEN @Language = 2 THEN V.JobTitleLang2
ELSE V.JobTitleLang1
END AS JobTitle
, ROW_NUMBER() OVER(PARTITION BY AL.RegistrantID
ORDER BY ActionDate ASC) AS RN
FROM dbo.hr_ActionLog AL LEFT OUTER JOIN dbo.RegistrantsListView RV ON AL.RegistrantID = RV.RegistrantID
LEFT OUTER JOIN dbo.hr_Employees E ON AL.EmployeeID = E.EmployeeID
LEFT OUTER JOIN dbo.hr_Users U ON AL.UserID = U.UserID
LEFT OUTER JOIN dbo.hr_Companies C ON AL.CompanyID = C.CompanyID
LEFT OUTER JOIN dbo.hr_Vacancies V ON AL.VacancyID = V.VacancyID
LEFT OUTER JOIN dbo.hr_Companies VC ON V.CompanyID = VC.CompanyID
WHERE (@Action IS NULL OR AL.Action = @Action)
AND (@DateFrom IS NULL OR dbo.DateOnly(AL.ActionDate) >= dbo.DateOnly(@DateFrom))
AND (@DateTo IS NULL OR dbo.DateOnly(AL.ActionDate) <= dbo.DateOnly(@DateTo))
AND (@CompanyID IS NULL OR AL.CompanyID = @CompanyID)
AND (@RegistrantID IS NULL OR AL.RegistrantID = @RegistrantID)
AND (@VacancyID IS NULL OR AL.VacancyID = @VacancyID)
--ORDER BY AL.ActionDate DESC
)
SELECT *
FROM CTE
WHERE RN = 1;
END
請建議如何更改此存儲過程?
該訣竅分區:) – DotnetSparrow