我正在嘗試查找處理日期中給定值的下列數據的最小值和最大值處理日期(請注意,行不會在週末處理,我不想將它們分解成兩組不同的,如果他們有相同的值)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