Oracle SQLDeveloper:如何根据 YEAR 范围获取唯一值的压缩列表

Oracle SQLDeveloper: How to get a condensed list of Unique values based on YEAR range

我有一个包含 4 列的 table:NAME、STARTYEAR、ENDYEAR、IDNUM

如何获得不同的列表,其中 STARTYEAR 是不同 NAME 和 IDNUM 的最小年份,ENDYEAR 是不同 NAME 和 IDNUM 的最大年份。

示例table:

CREATE TABLE ZZ_YEARRANGE (
NAME varchar(10),
STARTYEAR varchar(5),
ENDYEAR varchar(5),
IDNUM varchar(10));

INSERT ALL
INTO ZZ_YEARRANGE (NAME,STARTYEAR,ENDYEAR,IDNUM) VALUES ('Derick','1995','1998','ABC-100')
INTO ZZ_YEARRANGE (NAME,STARTYEAR,ENDYEAR,IDNUM) VALUES ('Derick','1999','2005','ABC-100')
INTO ZZ_YEARRANGE (NAME,STARTYEAR,ENDYEAR,IDNUM) VALUES ('Derick','1998','2003','ABC-101')
INTO ZZ_YEARRANGE (NAME,STARTYEAR,ENDYEAR,IDNUM) VALUES ('Rick','2001','2010','DEF-200')
INTO ZZ_YEARRANGE (NAME,STARTYEAR,ENDYEAR,IDNUM) VALUES ('Rick','2007','2015','DEF-200')
INTO ZZ_YEARRANGE (NAME,STARTYEAR,ENDYEAR,IDNUM) VALUES ('Rick','2002','2008','DEF-201')
INTO ZZ_YEARRANGE (NAME,STARTYEAR,ENDYEAR,IDNUM) VALUES ('Chad','1990','2001','ABC-100')
INTO ZZ_YEARRANGE (NAME,STARTYEAR,ENDYEAR,IDNUM) VALUES ('Chad','2002','2004','GHI-301')
INTO ZZ_YEARRANGE (NAME,STARTYEAR,ENDYEAR,IDNUM) VALUES ('Chad','1997','2003','GHI-300')
INTO ZZ_YEARRANGE (NAME,STARTYEAR,ENDYEAR,IDNUM) VALUES ('Brandon','1985','1995','JKL-400')
INTO ZZ_YEARRANGE (NAME,STARTYEAR,ENDYEAR,IDNUM) VALUES ('Brandon','1999','2009','JKL-401')
INTO ZZ_YEARRANGE (NAME,STARTYEAR,ENDYEAR,IDNUM) VALUES ('Brandon','1996','2002','JKL-400')
INTO ZZ_YEARRANGE (NAME,STARTYEAR,ENDYEAR,IDNUM) VALUES ('Brandon','2003','2007','JKL-400')
select 1 from DUAL;

Table 应该是这样的:

Derick  1995    1998    ABC-100
Derick  1999    2005    ABC-100
Derick  1998    2003    ABC-101
Rick    2001    2010    DEF-200
Rick    2007    2015    DEF-200
Rick    2002    2008    DEF-201
Chad    1990    2001    ABC-100
Chad    2002    2004    GHI-301
Chad    1997    2003    GHI-300
Brandon 1985    1995    JKL-400
Brandon 1999    2009    JKL-401
Brandon 1996    2002    JKL-400
Brandon 2003    2007    JKL-400

我想要得到的结果是:

Derick  1995    2005    ABC-100
Derick  1998    2003    ABC-101
Rick    2001    2015    DEF-200
Rick    2002    2008    DEF-201
Chad    1990    2001    ABC-100
Chad    2002    2004    GHI-301
Chad    1997    2003    GHI-300
Brandon 1985    2007    JKL-400
Brandon 1999    2009    JKL-401

很简单,只要将distinct列放在GROUP BY中,然后根据需要在其他列中添加MINMAX :

select NAME, min(STARTYEAR) STARTYEAR, max(ENDYEAR) ENDYEAR, IDNUM
from   ZZ_YEARRANGE
group by  NAME, IDNUM
order by NAME, IDNUM

NAME       STARTYEAR ENDYEAR IDNUM    
---------- --------- ------- ----------
Brandon    1985      2007    JKL-400    
Brandon    1999      2009    JKL-401    
Chad       1990      2001    ABC-100    
Chad       1997      2003    GHI-300    
Chad       2002      2004    GHI-301    
Derick     1995      2005    ABC-100    
Derick     1998      2003    ABC-101    
Rick       2001      2015    DEF-200    
Rick       2002      2008    DEF-201