查找最后一个在项目上工作的人(分组/具有sql?)

问题描述 投票:0回答:3

我试图弄清楚如何查询在项目(项目)上工作的最后一位(姓名)。

内容表A

     (id) | project  | name     | date
----------+----------+---------------------
        1 | ProjA    | Joe      | 1-1-2011
        2 | ProjA    | Sally    | 2-2-2011
        3 | ProjA    | Joe      | 3-3-2011
        4 | ProjB    | Sally    | 4-4-2011
        5 | ProjB    | Bert     | 5-5-2011

在这种情况下,我需要的是:

     (id) | project  | name     | date
----------+----------+-------------
        3 | ProjA    | Joe      | 3-3-2011
        5 | ProjB    | Bert     | 5-5-2011

到目前为止,我得到的是:

SELECT project, max(date) FROM TableA 

这将满足项目和日期,而不是人员的ID和名称。

SELECT id, project, name, max(date) FROM TableA 

这(显然)会导致错误

列'id'在HAVING子句中无效,因为它不包含在聚合函数或GROUP BY子句中。

我有点生疏和迷茫。

sql sql-server grouping having
3个回答
2
投票
您需要row_number()

select a.* from (select a.*, row_number() over (partition by a.project order by a.date desc) as seq from tablea a ) a where a.seq = 1;

如果日期有

关系,则需要dense_rank()


0
投票
我可能不明白这个问题,但这应该打勾:

SELECT id, project, name, max(date) FROM TableA GROUP BY id, project, name

欢呼安德烈亚斯

0
投票
尝试一下,

DECLARE @Temp_Data TABLE ( id int ,project varchar(30),[name] varchar(30),[date] date ) INSERT INTO @Temp_Data SELECT 1,'ProjA','Joe','1-1-2011' UNION ALL SELECT 2,'ProjA','Sally','2-2-2011' UNION ALL SELECT 3,'ProjA','Joe','3-3-2011' UNION ALL SELECT 4,'ProjB','Sally','4-4-2011' UNION ALL SELECT 5,'ProjB','Bert ','5-5-2011' ;WITH CTE_Temp_Data AS ( SELECT id, project,[name],[date],ROW_NUMBER() OVER (PARTITION BY project ORDER BY [date] DESC) AS R_NO FROM @Temp_Data ) SELECT id, project,[name],[date] FROM CTE_Temp_Data WHERE R_NO=1

© www.soinside.com 2019 - 2024. All rights reserved.