2016-06-13 68 views
-1

我有一個表id,first,last,date_addedSQL Server:聚合函數難題

我想獲得所有名字的列表,以及每個名字的最近僱用日期,但我也想獲得該名員工的姓氏。看不到寫這樣做的查詢!我想我需要加入到同一張桌子?

我迄今爲止最好的嘗試:

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 

回答

-1

除非我肯定誤解了這個問題,你只需要對數據進行分組?例子是:

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

我覺得你誤會了。 – Strawberry

+0

這給我一個比我想找的更多的列表。所以如果我的桌子有兩個「湯姆」的參賽作品(我們會說湯姆德隆格 - 1/1/16和湯姆漢克斯加1/2/16),結果會讓我看到兩個湯姆。我只會尋找湯姆漢克斯,因爲他最近加入了 – AstToTheRegionalMgr

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; 
+0

這非常有效!只需稍作修改,但非常感謝你指引我朝這個方向發展。 – AstToTheRegionalMgr

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