2013-08-16 24 views
0

每組重複記錄我有兩列像這樣的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 

請建議如何更改此存儲過程?

回答

4

需要雙方RegistrantId和CompanyID

ROW_NUMBER() OVER(PARTITION BY AL.RegistrantID, AL.CompanyID 
        ORDER BY ActionDate ASC) 
+0

該訣竅分區:) – DotnetSparrow

0

刪除where子句RN = 1並添加一個獨立應該就足夠了。