2010-07-02 108 views
0

我有两个表,如何根据聚合函数返回其他字段?

jobcli

  • CLIENT_ID
  • JOB_ID

工作

  • JOB_ID
  • JOBTITLE
  • 的startDate
  • projectmgr

我所遇到的麻烦是显示CLIENT_ID,JOB_ID,JOBTITLE,的startDate和projectmgr在查询中,其中该结果是由CLIENT_ID分组并有日期的最大值。

到目前为止,我可以得到一个由client_id和它们相应的max(startDate)组成的列表。

SELECT CLIENT_ID,MAX(的startDate)AS LastJob FROM jobcli INNER JOIN作业ON jobcli.job_id = dbo.jobs.id GROUP BY jobcli.client_id

此查询仅返回2个字段,CLIENT_ID和LastJob,但我也想显示上一份工作的job_id,projectmrg和标题。

此场景适用于SQL Server 2005. 感谢您的帮助。

回答

0

这是Stack Overflow上出现数十次的最大n组问题。

这里有一对夫妇的解决方案:

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; 
相关问题