выбрать данные за последние n недель

Cmaila
Дата: 30.05.2006 08:28:08
n=2
select *
from t1
where to_char(DATE_INPUT,'ww')>=to_char(sysdate,'ww')-2

как еще год учесть? что с других годов не прихватывало?
и если с начала года прошло меньше недель, чем n ?

плиз, хелп
Владимор Конев
Дата: 30.05.2006 08:41:15
Cmaila
n=2
select *
from t1
where to_char(DATE_INPUT,'ww')>=to_char(sysdate,'ww')-2

как еще год учесть? что с других годов не прихватывало?
и если с начала года прошло меньше недель, чем n ?

плиз, хелп

А что, простое вычитание нужного числа дней уже не работает??? Благо в недели ровно 7 дней, вне зависимости от месяца и года :)
select *
  from t1
 where DATE_INPUT >= sysdate - 7 * :n -- где вместо :n указать нужное число недель
Cmaila
Дата: 30.05.2006 08:56:19
логично
но я делаю группировку по ww
ww, если я правильно понимаю, сегодня)) группирует так
1 неделя - 21,22,23,24,25,26,27 мая
2 неделя - 28,29,30 мая
правильно?
where DATE_INPUT >= sysdate - 7 * :n - получим с 16 мая
zirex
Дата: 30.05.2006 09:00:59
Cmaila
как еще год учесть? что с других годов не прихватывало?
и если с начала года прошло меньше недель, чем n ?


исходный набор:
with tab as (
  select sysdate + rownum * 7 + 190 as dt, to_date('15.01.2007', 'DD.MM.YYYY') as filter_dt from dual 
  connect by level < 10
)
select * from tab

   	DT	FILTER_DT
1	13.12.2006 8:01:59	15.01.2007
2	20.12.2006 8:01:59	15.01.2007
3	27.12.2006 8:01:59	15.01.2007
4	03.01.2007 8:01:59	15.01.2007
5	10.01.2007 8:01:59	15.01.2007
6	17.01.2007 8:01:59	15.01.2007
7	24.01.2007 8:01:59	15.01.2007
8	31.01.2007 8:01:59	15.01.2007
9	07.02.2007 8:01:59	15.01.2007


вычисляем с учетом "отброса" предыдущего года (4 недели):
with tab as (
  select sysdate + rownum * 7 + 190 as dt, to_date('15.01.2007', 'DD.MM.YYYY') as filter_dt from dual 
  connect by level < 10
)
select dt from tab
where dt between filter_dt - 7 * 4
                 and filter_dt
and dt > trunc(filter_dt, 'YYYY')    

   	DT
1	03.01.2007 8:03:08
2	10.01.2007 8:03:08
zirex
Дата: 30.05.2006 09:02:19
...
and dt >= trunc(filter_dt, 'YYYY')
конечно же
Elic
Дата: 30.05.2006 09:03:05
Cmaila

1 неделя - 21,22,23,24,25,26,27 мая
2 неделя - 28,29,30 мая
Ты в какой буржуинской стране живёшь?!
where DATE_INPUT >= next_day(sysdate-1, to_char(to_date(7,'j'), 'day')) - 7*:n -- с понедельника!
Cmaila
Дата: 30.05.2006 09:14:16
with tt as (select 
0 cc, to_date('21.05.2006','dd-mm-yyyy') date1 from dual
union
select 
1 cc, to_date('22.05.2006','dd-mm-yyyy') date1 from dual
union
select 
1 cc, to_date('23.05.2006','dd-mm-yyyy') date1 from dual
union
select 
1 cc, to_date('24.05.2006','dd-mm-yyyy') date1 from dual
union
select 
1 cc, to_date('25.05.2006','dd-mm-yyyy') date1 from dual
union
select 
1 cc, to_date('26.05.2006','dd-mm-yyyy') date1 from dual
union
select 
1 cc, to_date('27.05.2006','dd-mm-yyyy') date1 from dual
union
select 
1 cc, to_date('27.05.2006','dd-mm-yyyy') date1 from dual
union
select 
1 cc, to_date('28.05.2006','dd-mm-yyyy') date1 from dual)
select sum(cc) cc,
to_char(date1,'ww') week
from tt
group by to_char(date1,'ww')
получается, что неделя начинается с воскресенья
и еще я читала, что неделя начинается в дня, которым начинался год

нет?
Elic
Дата: 30.05.2006 09:37:55
Cmaila
получается, что неделя начинается с воскресенья
Первый день недели - NLS-зависимое понятие. RTFM NLS_TERRITORY (FAQ)
Cmaila
и еще я читала, что неделя начинается в дня, которым начинался год
нет?
Зависит от того, что тебе нужно. RTFM Date Format Models for the ROUND and TRUNC Date Functions (FAQ)
Cmaila
Дата: 30.05.2006 11:05:10
NLS_territory CIS

по понедельникам группировать правильно будет?
group by trunc(DATE_INPUT,'iw')

туплю, как написать условие
where DATE_INPUT>=trunc(sysdate-7*n,'IW')
Cmaila
Дата: 30.05.2006 11:10:52
может так?
where DATE_INPUT>=trunc(sysdate-to_char(sysdate,'d')-7*(n-1)+1,'IW')