所以,你已经有了一个视图V:
SELECT id, startdate, enddate, endpt
FROM ...
您可以修改这是这样的:
SELECT id, startdate
, CASE WHEN nextdt IS NULL THEN enddate ELSE nextdt - 1 END enddate, endpt
FROM (SELECT id, startdate, enddate, endpt
, LEAD(startdate) OVER (PARTITION BY endpt ORDER BY startdate) nextdt
FROM ...)
一个简单的例子,使用表T,而不是一个视图,您的数据加上第三行,以说明X-Zero评论确定的情况。它可能不是你想要的,所以要小心。该查询会给你enddate减去下一个记录。
SQL> CREATE TABLE t (ID VARCHAR2(10), sd DATE, ed DATE, ep NUMBER);
Table created
SQL> INSERT INTO t VALUES ('G002S6YE',to_date('01/06/2011','DD/MM/YYYY'), to_date('31/05/2013','DD/MM/YYYY'), 1012427316307);
1 row inserted
SQL> INSERT INTO t VALUES ('G002W1AY',to_date('27/06/2011','DD/MM/YYYY'), to_date('30/09/2012','DD/MM/YYYY'), 1012427316307);
1 row inserted
SQL> INSERT INTO t VALUES ('G002W1AX',to_date('29/06/2011','DD/MM/YYYY'), to_date('30/06/2012','DD/MM/YYYY'), 1012427316307);
1 row inserted
SQL> SELECT id, sd
2 , CASE WHEN nextdt IS NULL THEN ed ELSE nextdt - 1 END ed, ep
3 FROM (SELECT id, sd, ed, ep
4 , LEAD(sd) OVER (PARTITION BY ep ORDER BY sd) nextdt
5 FROM t);
ID SD ED EP
---------- ----------- ----------- ----------
G002S6YE 1/6/2011 26/6/2011 1012427316
G002W1AY 27/6/2011 28/6/2011 1012427316
G002W1AX 29/6/2011 30/6/2012 1012427316
“早期”记录是由最早的开始日期确定的_solely_?如果有3条记录具有相同的'endpoint_number',会发生什么情况? –
@ X-Zero - 嗯,我基本上需要确保日期不重叠 –
哦,如果这是一个视图(没有完全捕捉到这个,内在),原始表定义/视图脚本是什么?我们可以通过引用基表来解决这个问题的更好的方法(并且视图内的视图有时会被忽视)。 –