我正在尝试查找处理日期中给定值的下列数据的最小值和最大值处理日期(请注意,行不会在周末处理,我不想将它们分解成两组不同的,如果他们有相同的值)SQL - 获取给定组的最小最大日期,并且有中断日期
SELECT 1, 'A',to_date('10/01/2012','dd/mm/yyyy'), 10, to_date('11/01/2012','dd/mm/yyyy') FROm DUAL
UNION ALL SELECT 1, 'A',to_date('11/01/2012','dd/mm/yyyy'), 10, to_date('12/01/2012','dd/mm/yyyy') FROm DUAL
UNION ALL SELECT 1, 'A',to_date('12/01/2012','dd/mm/yyyy'), 9, to_date('13/01/2012','dd/mm/yyyy') FROm DUAL
UNION ALL SELECT 1, 'A',to_date('13/01/2012','dd/mm/yyyy'), 9, to_date('14/01/2012','dd/mm/yyyy') FROm DUAL
UNION ALL SELECT 1, 'A',to_date('16/01/2012','dd/mm/yyyy'), 9, to_date('17/01/2012','dd/mm/yyyy') FROm DUAL
UNION ALL SELECT 1, 'A',to_date('17/01/2012','dd/mm/yyyy'), 10, to_date('18/01/2012','dd/mm/yyyy') FROm DUAL
UNION ALL SELECT 1, 'A',to_date('18/01/2012','dd/mm/yyyy'), 10, to_date('19/01/2012','dd/mm/yyyy') FROm DUAL;
我尝试(我知道是错的)
SELECT id, cd, value, min(p_dt) min_dt, max(p_dt) max_dt FROM T
group by id, cd, value;
这将返回
ID CD VALUE MIN_DT MAX_DT
----------------------------------------------------------------------------------
1 A 9 January, 12 2012 00:00:00+0000 January, 16 2012 00:00:00+0000
1 A 10 January, 10 2012 00:00:00+0000 January, 18 2012 00:00:00+0000
我想回到什么是
ID CD VALUE MIN_DT MAX_DT
----------------------------------------------------------------------------------
1 A 9 January, 12 2012 00:00:00+0000 January, 16 2012 00:00:00+0000
1 A 10 January, 10 2012 00:00:00+0000 January, 11 2012 00:00:00+0000
1 A 10 January, 17 2012 00:00:00+0000 January, 18 2012 00:00:00+0000
我尝试不同的方法进行查询,但我不能拿出一个工作查询。
对不起,我不明白你的理由分裂日期,因为你有。你能解释一下吗?我相信你正在看[标签:间隙和岛屿]问题,但我不能确定。 – Ben 2013-02-19 17:52:04
@ben,如果您看到数据代码有10个值,从01/10到01/11以及01/17到01/18有效,从01/12到01/16有9个值。我想返回值的最大值和最小值日期,并根据这些日期更新其他表中的值。现在从我原来的查询它有两个值9,10日期范围01/12至01/16这是不正确的。 – rstech 2013-02-19 18:02:30
@ 2012年1月14日,14日和15日是周末 – rstech 2013-02-19 18:22:43