Oracle SQL: запрос результатов предыдущих X isoweeks () (где X может быть> 52) - PullRequest
2 голосов
/ 24 марта 2010

Как я могу адаптировать этот запрос, чтобы показать предыдущие, скажем, 61 неделю?

select 
       to_char(order_date,'IYYY') as iso_year,
       to_char(order_date,'IW') as iso_week,
       sum(sale_amount)
from orders
where 
    to_char(order_date,'IW') <> to_char(SYSDATE) --exclude this week in progress
    and to_char(order_date,'IYYY') = 2010
group by 
         to_char(order_date,'IYYY')
         to_char(order_date,'IW')

Мой первый инстинкт - сделать

where 
    to_char(order_date,'IW') <> to_char(SYSDATE) --exclude this week in progress
    and to_char(order_date,'IYYY') >= to_char(order_date,'IW') - 61

Могу ли я опустить требование "2010" и ограничить результаты 61 строкой? Есть ли лучший способ?

Очень ценю любую помощь, указывающую мне правильное направление!

1 Ответ

4 голосов
/ 24 марта 2010

Можете ли вы просто сделать это:

select 
       to_char(order_date,'IYYY') as iso_year,
       to_char(order_date,'IW') as iso_week,
       sum(sale_amount)
from orders
where order_date >= TRUNC(SYSDATE,'IW') - (61 * 7)
  and order_date < TRUNC(SYSDATE,'IW')
group by 
         to_char(order_date,'IYYY'),
         to_char(order_date,'IW')
...