如何获得每个月的最短日期为六个月?
问题描述:
我有这样的数据。如何获得每个月的最短日期为六个月?
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这样。我不知道该怎么做。那是我没有准备/发布任何查询的原因。
答
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;
会做
答
我不明白怎么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');
答
试试:
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'))
你应该闪回你的答案了一下。 – joce 2013-03-25 23:00:44