2013-03-25 4 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.

Мне нужно продлить минимальную дату каждого месяца (первое обновление последних 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 

--sorry за вопрос прямой 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

Смежные вопросы