我想使用oracle分析函数解决以下id 100和101的场景,作为给定的输出。有什么想法吗?
表a:
ID ValidFrom ValidTo
100 1/1/2009 12/31/2010
100 1/1/2011 3/31/2012
101 8/1/2013 7/31/2014
101 8/1/2014 8/31/2014
表b
ID ValidFrom ValidTo
100 11/1/2008 12/31/2011
100 2/1/2012 2/29/2012
101 8/1/2013 6/30/2014
101 7/1/2014 8/31/2014
输出:
ID ValidFrom ValidTo
100 11/1/2008 12/31/2008
100 1/1/2009 12/31/2010
100 1/1/2011 12/31/2011
100 1/1/2012 1/31/2012
100 2/1/2012 2/29/2012
100 3/1/2012 3/31/2012
---------------------------
101 8/1/2013 6/30/2014
101 7/1/2014 7/31/2014
101 8/1/2014 8/31/2014
1条答案
按热度按时间busg9geu1#
此查询,使用分析
lead()
做这个工作。列note
显示行是来自您的数据还是缺少间距:dbfiddle演示
一开始数据是不固定的,只是为了把所有的日期都放在一列中,这样更便于进一步分析。并集删除重复的值。列
dir
如果这是from
或者to
日期。那么lead
根据该方向的类型,应用逻辑。我觉得可以简化一下:)