Помогите с селектом

erny
Дата: 30.05.2006 17:56:21
CREATE TABLE test
(
RN     NUMBER(17),
dBGN   DATE,
dEND   DATE
)
INSERT INTO test(rn,dBGN,dEND)
select 1,to_date('01.01.2005', 'dd.mm.yyyy'),to_date('30.01.2005', 'dd.mm.yyyy') from dual union all
select 2,to_date('11.02.2005', 'dd.mm.yyyy'),to_date('28.02.2005', 'dd.mm.yyyy') from dual union all
select 3,to_date('11.03.2005', 'dd.mm.yyyy'),to_date('30.03.2005', 'dd.mm.yyyy') from dual union all
select 4,to_date('11.04.2006', 'dd.mm.yyyy'),to_date('30.04.2005', 'dd.mm.yyyy') from dual union all
select 5,to_date('11.05.2006', 'dd.mm.yyyy'),to_date('30.05.2005', 'dd.mm.yyyy') from dual union all
select 6,to_date('11.06.2006', 'dd.mm.yyyy'),to_date('30.06.2005', 'dd.mm.yyyy') from dual union all
select 7,to_date('11.07.2006', 'dd.mm.yyyy'),to_date('30.07.2005', 'dd.mm.yyyy') from dual union all
select 8,to_date('11.08.2006', 'dd.mm.yyyy'),to_date('30.08.2005', 'dd.mm.yyyy') from dual union all
select 9,to_date('11.09.2006', 'dd.mm.yyyy'),to_date('30.09.2005', 'dd.mm.yyyy') from dual union all
select 10,to_date('11.10.2006', 'dd.mm.yyyy'),to_date('30.10.2005', 'dd.mm.yyyy') from dual union all
select 11,to_date('11.11.2006', 'dd.mm.yyyy'),to_date('30.11.2005', 'dd.mm.yyyy') from dual union all
select 12,to_date('11.12.2006', 'dd.mm.yyyy'),to_date('30.12.2005', 'dd.mm.yyyy') from dual union all
select 13,to_date('11.01.2006', 'dd.mm.yyyy'),to_date('30.01.2006', 'dd.mm.yyyy') from dual union all
select 14,to_date('11.02.2006', 'dd.mm.yyyy'),to_date('28.02.2006', 'dd.mm.yyyy') from dual
необходимо вибрать даты месяци которых лежат в периоде
to_date('01.05.2005', 'dd.mm.yyyy')
по
to_date('31.05.2006', 'dd.mm.yyyy')
и в полученом селекте в первой строке должна быть начало месяца to_date('01.05.2005', 'dd.mm.yyyy') ,
а в последней конец месяца заданого периода to_date('31.05.2006', 'dd.mm.yyyy')
селект должен возвращать
	5	01.05.2006	30.05.2005
	6	11.06.2006	30.06.2005
	7	11.07.2006	30.07.2005
	8	11.08.2006	30.08.2005
	9	11.09.2006	30.09.2005
	10	11.10.2006	30.10.2005
	11	11.11.2006	30.11.2005
	12	11.12.2006	30.12.2005
	13	11.01.2006	30.01.2006
	14	11.02.2006	31.05.2006
пол дня ломаю голову, ничего неполучается
dmidek
Дата: 30.05.2006 18:10:09
А Вы с тестовыми данными ничего не напутали ?
У Вас dbgn 2006 год, а dbend 2005 год.
Elic
Дата: 30.05.2006 18:11:08
В лоб: два row_number() (asc/desc) + два соответствующих decode.
Lamo
Дата: 30.05.2006 19:17:45
erny
CREATE TABLE test
(
RN     NUMBER(17),
dBGN   DATE,
dEND   DATE
)
INSERT INTO test(rn,dBGN,dEND)
select 1,to_date('01.01.2005', 'dd.mm.yyyy'),to_date('30.01.2005', 'dd.mm.yyyy') from dual union all
select 2,to_date('11.02.2005', 'dd.mm.yyyy'),to_date('28.02.2005', 'dd.mm.yyyy') from dual union all
select 3,to_date('11.03.2005', 'dd.mm.yyyy'),to_date('30.03.2005', 'dd.mm.yyyy') from dual union all
select 4,to_date('11.04.2006', 'dd.mm.yyyy'),to_date('30.04.2005', 'dd.mm.yyyy') from dual union all
select 5,to_date('11.05.2006', 'dd.mm.yyyy'),to_date('30.05.2005', 'dd.mm.yyyy') from dual union all
select 6,to_date('11.06.2006', 'dd.mm.yyyy'),to_date('30.06.2005', 'dd.mm.yyyy') from dual union all
select 7,to_date('11.07.2006', 'dd.mm.yyyy'),to_date('30.07.2005', 'dd.mm.yyyy') from dual union all
select 8,to_date('11.08.2006', 'dd.mm.yyyy'),to_date('30.08.2005', 'dd.mm.yyyy') from dual union all
select 9,to_date('11.09.2006', 'dd.mm.yyyy'),to_date('30.09.2005', 'dd.mm.yyyy') from dual union all
select 10,to_date('11.10.2006', 'dd.mm.yyyy'),to_date('30.10.2005', 'dd.mm.yyyy') from dual union all
select 11,to_date('11.11.2006', 'dd.mm.yyyy'),to_date('30.11.2005', 'dd.mm.yyyy') from dual union all
select 12,to_date('11.12.2006', 'dd.mm.yyyy'),to_date('30.12.2005', 'dd.mm.yyyy') from dual union all
select 13,to_date('11.01.2006', 'dd.mm.yyyy'),to_date('30.01.2006', 'dd.mm.yyyy') from dual union all
select 14,to_date('11.02.2006', 'dd.mm.yyyy'),to_date('28.02.2006', 'dd.mm.yyyy') from dual
необходимо вибрать даты месяци которых лежат в периоде
to_date('01.05.2005', 'dd.mm.yyyy')
по
to_date('31.05.2006', 'dd.mm.yyyy')
и в полученом селекте в первой строке должна быть начало месяца to_date('01.05.2005', 'dd.mm.yyyy') ,
а в последней конец месяца заданого периода to_date('31.05.2006', 'dd.mm.yyyy')
селект должен возвращать
	5	01.05.2006	30.05.2005
	6	11.06.2006	30.06.2005
	7	11.07.2006	30.07.2005
	8	11.08.2006	30.08.2005
	9	11.09.2006	30.09.2005
	10	11.10.2006	30.10.2005
	11	11.11.2006	30.11.2005
	12	11.12.2006	30.12.2005
	13	11.01.2006	30.01.2006
	14	11.02.2006	31.05.2006
пол дня ломаю голову, ничего неполучается


может
select RN, Trunc(dBGN, 'MM'), Add_Months(Trunc(dEND, 'MM'), 1)
from test
where :DateBeg <= dBGN and dEND <= :DateEnd
Lamo
Дата: 30.05.2006 19:19:52
Lamo

может
select RN, Trunc(dBGN, 'MM'), Add_Months(Trunc(dEND, 'MM'), 1)
from test
where :DateBeg <= dBGN and dEND <= :DateEnd

Add_Months(Trunc(dEND, 'MM'), 1) - 1