【问题标题】:Table has one record per employee per year. How do I select the record for each employee for the latest year for that employee?表中每个员工每年都有一条记录。如何为每个员工选择该员工最近一年的记录?
【发布时间】:2014-05-01 05:55:51
【问题描述】:

我的表每年每个员工都有一条记录。如何为每位员工选择一条记录以获得该员工的最近一年?

列是employee_ref, firstname, lastname, employment_year

每个employee_ref都会有几条记录,每条记录都有不同的employment_year

我想为每个employee_ref 选择一条记录,其中employment_year 具有该employee_ref 的最高值,并显示该记录中的firstnamelastname

虽然我懂 SQL,但我的技能还达不到这一点。

【问题讨论】:

  • 您使用的是什么数据库? SQL Server、mySQL、Postgress 等?
  • 这种情况下没关系。

标签: sql


【解决方案1】:

您可以通过子选择来做到这一点:

SELECT employee_ref, firstname, lastname
FROM table
WHERE employment_year = (
    SELECT MAX(employment_year)
    FROM table b
    WHERE b.employee_ref = table.employee_ref)

【讨论】:

    【解决方案2】:

    这样的事情应该可以工作。

    select firstname, lastname, maxyear
    from table join (
    select employee_ref, max(employment_year) maxyear
    from table
    group by employee_ref) temp on table.employee_ref = temp.employee_ref
    and employment_year = maxyear
    

    【讨论】:

      【解决方案3】:

      假设employment_year 是一个整数,你可以这样做:

      SELECT TOP 1 * from (select * from employee where employment_ref=x order by employment_year)
      

      更多详情请见here

      【讨论】:

      • 未指定的 rdbms 可能不支持该语法。
      【解决方案4】:

      这应该可行:

      with EmployeesMostRecentYear as 
      (
      SELECT [Employee_ref]
        ,[firstname]
        ,[lastname]
        ,[employment_year]
        ,ROW_NUMBER() over (partition by [Employee_ref],[firstname],[lastname] order by [employment_year] desc) as YearIndex
      FROM [TestDb].[dbo].[Employees] E 
      )
      select * from EmployeesMostRecentYear
      where YearIndex = 1 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-18
        • 2022-01-19
        • 2012-02-17
        • 2020-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多