我有这样的数据。
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
- 很抱歉要求直接排队。我不知道该怎么做。这就是我没有准备/发布任何查询的原因。
答案 0 :(得分: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;
会这样做
答案 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');
答案 2 :(得分: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'))