我试图弄清楚如何查询在项目(项目)上工作的最后一位(姓名)。
内容表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子句中。
我有点生疏和迷茫。
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()
。
SELECT id, project, name, max(date) FROM TableA
GROUP BY id, project, name
欢呼安德烈亚斯
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