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 回答