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で自動的に更新されます。

毎月の最小日付(過去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

-このような直接の質問をしてすみません。どうすればいいのかわかりません。それが私がクエリを準備/投稿していない理由です。

4

3 に答える 3

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

于 2013-03-25T10:07:34.683 に答える
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');
于 2013-03-25T10:07:06.400 に答える
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'))
于 2013-03-25T22:41:39.300 に答える