2016-06-13 16 views
-1

私は列がidfirst,last,date_addedのテーブルを持っています。SQL 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

これは私が探している以上のもののリストを私に与えます。私のテーブルに「Tom」のエントリが2つある場合(Tom Delonge - 1/1/16が追加され、Tom Hanksが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

あなたの最高の試みが近くにあったが、あなたは戻って参加する必要がありますあなたの最大(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