2009-06-18 104 views
1

我有一個MSSQL 2000表,有很多重複的條目。每行都有一個EffectiveChange數據列。我想通過獲取每個鍵值的最大(EffectiveChange)行來獲得最新的行。如何獲取單個表中每組鍵值的最大值?

這是一些示例數據:

NPANXX TZONE EFFCHANGE RATE 
555555 1  01/01/09 1 
555555 1  05/01/09 6 
214555 2  01/01/09 1 
214555 2  05/01/09 3 
657555 3  05/01/09 1 
657555 1  01/01/09 1 

我想出了這一點:

SELECT DISTINCT 
    NPANXX, 
    TZONE, 
    RATE 
FROM AreaCodes 
INNER JOIN (SELECT DISTINCT NPANXX, EFFCHANGE FROM AREACODES) b 
    ON b.NPANXX = AreaCodes.NPANXX 
GROUP BY 
    NPANXX, 
    TZONE, 
    RATE 
HAVING AreadCodes.EFFCHANGE = max(b.EFFCHANGE) 

我的問題是這樣的詢問是否會給予我最大EFFCHANGE行每個鍵(NPANXX ),還是隻會給我整行的MAX(EFFCHANGE)行?

回答

3

的一種方式,因爲你是在2005年用2000只及以上,你也可以使用ROW_NUMBER()

SELECT t1.* 
from AreaCodes t1 
INNER JOIN (SELECT NPANXX, max(EFFCHANGE) as MaxDate FROM AREACODES 
group by NPANXX) t2 
    ON t1.NPANXX = t2.NPANXX 
and t1.EFFCHANGE = t2.MaxDate 

這裏是完整的代碼,包括DML和DDL

create table AreaCodes(NPANXX int,TZONE int,EFFCHANGE datetime,RATE int) 

insert AreaCodes values(555555,1,'20090101',1) 
insert AreaCodes values(555555,1,'20090501',6) 
insert AreaCodes values(214555,2,'20090101',1) 
insert AreaCodes values(214555,2,'20090501',3) 
insert AreaCodes values(657555,3,'20090501',1) 
insert AreaCodes values(657555,1,'20090101',1) 


SELECT t1.* 
from AreaCodes t1 
INNER JOIN (SELECT NPANXX, max(EFFCHANGE) as MaxDate FROM AREACODES 
group by NPANXX) t2 
    ON t1.NPANXX = t2.NPANXX 
and t1.EFFCHANGE = t2.MaxDate 



output 
657555 3 2009-05-01 00:00:00.000 1 
555555 1 2009-05-01 00:00:00.000 6 
214555 2 2009-05-01 00:00:00.000 3 
+0

你內嵌表將只具有MAX(EFFCHANGE)爲整個表格。最新的EFFCHANGE日期是不同的所有NPANXXs – scottm 2009-06-18 14:48:36

相關問題