如何查找聚合分组的列信息

时间:2012-04-23 13:52:51

标签: sql sql-server sql-server-2000 max derived-table

我在SQL Server 2000上编写了一个复杂的查询,它部分包含一个到派生表的连接。遗憾的是,这张表并没有完全按照我的要求返回,因为基础数据与我的预期不同。说数据是这样的:

USERID,OS,DATEINSTALLED
237,win,01/01/1980
237,dos,01/02/1978
237,lin,08/08/2002
132,win,03/03/1982
132,dos,03/07/2002
132,mac,03/07/2002

然后我的查询看起来如此:

SELECT USERID, DATEINSTALLED = max(DATEINSTALLED)
FROM INSTALLATIONS
GROUP BY USERID

哪会给出

的结果集
237,08/08/2002
132,03/07/2002

但我要求的是结果集:

237,lin,08/08/2002
132,dos,03/07/2002

OR

237,lin,08/08/2002
132,mac,03/07/2002

如果它拿起mac或dos我不是真的很好,但它不能给3行;因为我需要的是每行userid一行,最大日期和“a”有效的OS组合。所以mac或dos是有效的,但win不是(对于用户132)。

因为它是一个派生表,作为更复杂的查询的一部分,我需要保持它尽可能干净和简单,因为执行时间(源表的大小是几十万行)。正如标签所暗示的那样,我只限于SQL Server 2000。

1 个答案:

答案 0 :(得分:4)

试试这个:

SELECT USERID, OS, DATEINSTALLED
FROM INSTALLATIONS
JOIN (
   SELECT USERID, DATEINSTALLED = max(DATEINSTALLED)
   FROM INSTALLATIONS
   GROUP BY USERID
) AS T
ON INSTALLATIONS.USERID = T.USERID AND INSTALLATIONS.DATEINSTALLED = T.DATEINSTALLED