Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Данные за последние 2-е недели, без вложенного запроса.  [new]
orrery
Member

Откуда:
Сообщений: 7
Всем привет!

Помогите, пожалуйста, с запосом.

Есть таблица продаж #prod.
Необходимо вывести все записи из таблицы #prod, а также вывести отдельным полем продажи за последние 2-е недели.

Как сделать это вложенным зпросом мне понятно, но вот как сделать тоже самое без вложенного запроса я не знаю.

Я как-то зациклился на оконных функциях, но там ограничений по "rows", кроме "n preceding" я не нашел.

Кажется вопрос простой и должен быть очень распространен, но решения я не нашел.

Спасибо.

create table #temp(date_p datetime, sum_prod real)

insert into #temp(date_p,sum_prod) values('20140330',30),('20140329',10),('20140327',50),('20140325',40),('20140315',33),('20140314',7),('20140201',70)

--Таблица продаж
select date_p, datepart(year,date_p) yr, datepart(week,date_p) wk, sum_prod
into #prod
from #temp 

--Продажи за последние 2-е недели
select * 
	,(select sum(sum_prod) from #prod where yr=p.yr and wk between p.wk-1 and p.wk) as sum_prod_2week
from #prod p
order by date_p desc

--Пытался сделать с помощью оконной функции, но это совершенно не то. 
--Здесь берутся данные текущей записи и предыдущей, но предыдущая запись может быть и за прошлый год!
select * 
	,sum(sum_prod) over(order by date_p rows between 1 preceding and current row) as sum_prod_error
from #prod p
order by date_p desc

drop table #temp
drop table #prod
30 мар 14, 21:19    [15808263]     Ответить | Цитировать Сообщить модератору
 Re: Данные за последние 2-е недели, без вложенного запроса.  [new]
orrery
Member

Откуда:
Сообщений: 7
Что очень сложный вопрос?)))
31 мар 14, 00:04    [15808894]     Ответить | Цитировать Сообщить модератору
 Re: Данные за последние 2-е недели, без вложенного запроса.  [new]
o-o
Guest
не, ну можно через join переписать :)

select p.date_p, p.yr, p.wk, p.sum_prod,
	sum(pp.sum_prod) as sum_prod_2week
from #prod p join #prod pp on p.yr=pp.yr and pp.wk between p.wk-1 and p.wk
group by p.date_p, p.yr, p.wk, p.sum_prod
order by p.date_p desc
31 мар 14, 00:19    [15808929]     Ответить | Цитировать Сообщить модератору
 Re: Данные за последние 2-е недели, без вложенного запроса.  [new]
Добрый Э - Эх
Guest
orrery,

в случае с аналитическими функциями нужно смотреть в сторону RANGE-окон, а не ROWS, как у тебя реализовано...
31 мар 14, 05:26    [15809102]     Ответить | Цитировать Сообщить модератору
 Re: Данные за последние 2-е недели, без вложенного запроса.  [new]
orrery
Member

Откуда:
Сообщений: 7
Спасибо всем.
Вариант с join вполне себе.

Спасибо.
31 мар 14, 10:54    [15809723]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить