根据您所使用的DB2,有一些分析函数可以使此问题易于解决。下面是Oracle中的一个示例,但是select语法似乎非常相似。
create table t1 (c1 char, c2 number, c3 date);insert into t1 VALUES ('A', 5, DATE '2009-01-01');insert into t1 VALUES ('A', 12, DATE '2009-02-01');insert into t1 VALUES ('A', 12, DATE '2009-03-01');insert into t1 VALUES ('A', 12, DATE '2009-04-01');insert into t1 VALUES ('A', 9, DATE '2009-05-01');insert into t1 VALUES ('A', 9, DATE '2009-06-01');insert into t1 VALUES ('A', 5, DATE '2009-07-01');SQL> l 1 SELECT C1, C2, C3 2 FROM (SELECt C1, C2, C3, 3 LAG(C2) OVER (PARTITION BY C1 ORDER BY C3) AS PRIOR_C2, 4 LEAD(C2) OVER (PARTITION BY C1 ORDER BY C3) AS NEXT_C2 5 FROM T1 6 ) 7 WHERe C2 <> PRIOR_C2 8 OR PRIOR_C2 IS NULL -- to pick up the first value 9 ORDER BY C1, C3SQL> /C C2 C3- ---------- -------------------A 5 2009-01-01 00:00:00A 12 2009-02-01 00:00:00A 9 2009-05-01 00:00:00A 5 2009-07-01 00:00:00


