我在 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
或者
237,lin,08/08/2002
132,mac,03/07/2002
如果它选择 mac 或 dos,我并不大惊小怪,但它不能提供 3 行;因为我需要的是每行userid
,具有最大日期和该组合的“一个”有效操作系统。所以 mac 或 dos 是有效的,但 win 不是(对于用户 132)。
由于它是作为更复杂查询的一部分的派生表,因此由于执行时间的原因,我需要使其尽可能干净和简单(源表大小为几十万行)。正如标签所暗示的那样,我仅限于 SQL Server 2000。