我有两张桌子,
jobcli
作业
我遇到的问题是在查询中显示client_id,job_id,jobTitle,startDate和projectmgr,其中结果按client_id分组并且具有最大日期。
到目前为止,我可以获得一个由client_id分组的列表及其对应的max(startDate)。
SELECT client_id,MAX(startDate)AS LastJob 在jobcli.job_id = dbo.jobs.id上的jobcli INNER JOIN工作 GROUP BY jobcli.client_id
此查询仅返回2个字段,client_id和LastJob,但我还想显示上一个作业的job_id,projectmrg和title。
此方案适用于SQL Server 2005。 谢谢你的帮助。
答案 0 :(得分:0)
这是Stack Overflow上出现了数十次最大的每组问题。
以下是几个解决方案:
SELECT j1.*
FROM jobcli j1
WHERE NOT EXISTS (
SELECT * FROM jobcli j2
WHERE j1.client_id = j2.client_id
AND j1.startDate < j2.startDate
);
或者,由于您使用的是Microsoft SQL Server 2005,因此可以使用窗口函数:
WITH rownumbered_jobcli AS (
SELECT j.*, ROW_NUMBER() OVER (PARTITION BY j.client_id
ORDER BY j.startDate DESC) AS RN
FROM jobcli;
)
SELECT * FROM rownumbered_jobcli WHERE RN = 1;