SQL Server:聚合函数困境

时间:2016-06-13 17:59:39

标签: sql-server max

我的表格中包含idfirstlastdate_added列。

我想获得所有名字的列表,以及每个名字的最近雇用日期,但我也希望获得该雇员的姓氏。看不到写这样做的查询!我想我需要加入同一张桌子?

到目前为止我的最佳尝试:

select 
    users.first, users.last, u2.date_added
from
    (select 
         first, max(date_added) as date_added
     from users
     group by first) u2
left join 
    users on u2.first = users.first
group by 
    users.first, users.last, u2.date_added
order by 
    users.first

3 个答案:

答案 0 :(得分:0)

如果你只是以名字(看起来很好奇),那么我会推荐row_number()

select u.first, u.last, u.date_added
from (select u.*, row_number() over (partition by first, date_added desc) as seqnum
      from users u
     ) u
where seqnum = 1;

答案 1 :(得分:0)

您的最佳尝试已接近,但您需要加入到您的max(date_added),如下所示

DECLARE @users TABLE
    (
        id int IDENTITY(1,1)
        , first varchar(100)
        , last varchar(100)
        , date_added datetime
    )

INSERT INTO @users
    (first
    ,last
    ,date_added
    )
    SELECT 'john', 'doe', GETDATE()
    UNION SELECT 'john', 'deere', DATEADD(d, 1, GETDATE())
    UNION SELECT 'jane', 'doe', GETDATE()

--actual data
SELECT * FROM @users

--desired output
SELECT 
    u.*
    FROM @users u
    INNER JOIN (
        SELECT first, max(date_added) AS date_added_max
        FROM @users
        GROUP BY first
    ) max_u
    ON u.first = max_u.first
    AND u.date_added = max_u.date_added_max
ORDER BY u.first

答案 2 :(得分:-1)

除非我确实误解了这个问题,否则你只需要对数据进行分组?例如:

select first, last, max(date_added) as date_added
from users
group by first, last