代码之家  ›  专栏  ›  技术社区  ›  larryq

是否使用适当的SQL Server方法检索此分组数据?

  •  2
  • larryq  · 技术社区  · 15 年前

    所以一个给定的雇员很可能在这个表中有多行。我想检索由LastModifiedDate确定的每个员工的最新记录。做这件事的好方法是什么?嵌套查询还是类似的?

    谢谢你的建议。

    4 回复  |  直到 15 年前
        1
  •  6
  •   Mike Forman    15 年前

    您可以使用这样的方法来显示每个员工最近的一行。这是行号函数的一个很好的用法。

        with ranking as 
        (
            select *, ROW_NUMBER() over(partition by EmployeeID order by LastModifiedDate desc) as rn
            from AU_EMPLOYEE
        )
        select * from ranking where rn = 1
    
        2
  •  3
  •   A-K    15 年前
    SELECT <your columns>
    FROM (
    SELECT <your columns>,
    ROW_NUMBER() OVER(PARTITION BY EmployeeID ORDER BY LastModifiedDate DESC) AS rn
    ) AS t
    WHERE rn=1
    
        3
  •  3
  •   Community Mohan Dere    9 年前

    假设至少有SQL2005,那么您可以使用 CTE :

    编辑 here here 在过去,一定要测试性能。使用MAX的CTE版本通常会优于基于行数的解决方案。

    ;with cteMaxDate as (
        select EmployeeID, max(LastModifiedDate) as MaxDate
            from AU_EMPLOYEE
            group by EmployeeID
    )
    select e.EmployeeID, e.Column1, e.Column2, ...
        from cteMaxDate md
            inner join AU_EMPLOYEE e
                on md.EmployeeID= e.EmployeeID
                    and md.MaxDate = e.LastModifiedDate
    
        4
  •  2
  •   matthewaveryusa    15 年前

    然而,更普遍的解决办法是

    SELECT * FROM
    (SELECT EmployeeID, LastModifiedDate
    FROM AU_EMPLOYEE
    WHERE LastModifiedDate<='X' ORDER BY LastModifiedDate Desc) A
    GROUP BY A.EmployeeID