2013-03-25 103 views
1

我有這樣的數據。如何獲得每個月的最短日期爲六個月?

Process_date SEQ_No 
------------- --------- 
16-MAR-13 733 
09-MAR-13 732 
02-MAR-13 731 
24-FEB-13 730 
16-FEB-13 728 
09-FEB-13 727 
02-FEB-13 726 
26-JAN-13 725 
21-JAN-13 724 
12-JAN-13 723 
05-JAN-13 722 
29-DEC-12 721 
24-DEC-12 720 
15-DEC-12 719 
08-DEC-12 718 
03-DEC-12 717 
22-NOV-12 716 
17-NOV-12 715 
10-NOV-12 714 
03-NOV-12 713 
29-OCT-12 712 
23-OCT-12 711 
13-OCT-12 710 
05-OCT-12 709 
28-SEP-12 708 
22-SEP-12 707 
15-SEP-12 706 
08-SEP-12 705 
01-SEP-12 704 

每個月管理員都會刷新實際數據表,並自動將上面的表更新爲唯一的seq_no和process_date。

我需要extarct每個月的最短日期(最近6個月的第一次刷新 - 不包括當前月份)以及與該月相關的seq_no所以使用連接(使用seq_no - 可在主表中)我可以結合實際數據。

我需要像結果:

02-MAR-13 731 (I don't need MAR as it should not take current month data) 

,所以我需要一個像下面的最終結果:

02-FEB-13 726 
05-JAN-13 722 
08-DEC-12 718 
03-NOV-12 713 
05-OCT-12 709 
01-SEP-12 704 

- 對不起詢問直接quetion這樣。我不知道該怎麼做。那是我沒有準備/發佈任何查詢的原因。

回答

2
select Process_date, SEQ_No 
    from (select Process_date, SEQ_No, 
       row_number() over (partition by trunc(process_date, 'mm') order by process_date) rn 
      from yourtab 
     where Process_date < trunc(sysdate, 'mm')) 
where rn = 1; 

會做

小提琴例如:http://sqlfiddle.com/#!4/a5452/1

1

我不明白怎麼seq_no在另一個表... 但使用輸入數據:

select 
    min(process_date), 
    min(seq_no) keep (dense_rank first order by process_date) 
from 
    your_table 
where 
    process_date between add_months(trunc(sysdate,'MM'),-7) 
        and last_day(add_months(sysdate, -1)) 
group by 
    trunc(process_date,'MM'); 
0

試試:

SELECT seq_no,process_date FROM my_table 
WHERE process_date IN (SELECT min(process_date) 
         FROM my_table 
         GROUP BY TRUNC(process_date,'MM')) 
+0

你應該閃回你的答案了一下。 – joce 2013-03-25 23:00:44

相關問題