Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:聚合函数困境_Sql Server_Max - Fatal编程技术网

Sql server SQL Server:聚合函数困境

Sql server SQL Server:聚合函数困境,sql-server,max,Sql Server,Max,我有一个表,其中有列id,first,last,date\u added 我想得到所有名字的列表,以及每个名字的最近雇佣日期,但我还想得到该员工的姓氏。无法查看以编写执行此操作的查询!我想我需要加入同一张桌子 我迄今为止最好的尝试是: select users.first, users.last, u2.date_added from (select first, max(date_added) as date_added from users

我有一个表,其中有列
id
first
last
date\u 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

除非我误解了这个问题,你肯定只需要将数据分组?例如:

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

如果您只是直呼其名(这似乎很奇怪),那么我建议您使用
row\u number()


您的最佳尝试已接近尾声,但您需要回到您的最大值(添加日期),如下所示

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

我想你误解了。这给了我一个清单,上面列出的比我要找的还多。因此,如果我的表中有两个“Tom”条目(我们将说Tom Delonge-添加了1/1/16,Tom Hanks添加了1/2/16),那么结果将显示两个Tom。我只想找汤姆·汉克斯,因为他最近才被加上去。他干得不错!不得不做一点小小的修改,但非常感谢您为我指明了这个方向。
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