2013-03-27 2 views
0

У меня есть таблица, которую я хочу получить за предыдущие четыре недели. Закажите общее количество в запросе. Но я хочу, чтобы вернуть его с SELECT, (всего предыдущего 4 недели Заказ1 колонке подряд - если они существуют)SQL Rollup последние 4 недели всего

PurchasingID Order1    Date   FourWeekTotal 
------------ ------------------- -------  --------------- 
1   1.00    2013-04-21 14.00 
2   2.00    2013-04-14 12.00 
3   3.00    2013-04-07 9.00 
4   4.00    2013-03-31 5.00 
5   5.00    2013-03-24 0.00 
+0

Откуда вы получаете стоимость 14,00 – Justin

+0

ЗакупкиID 2 + 3 + 4 + 5 – Colbs

ответ

2

Мое понимание для еа ch в вашей таблице, вы хотите увидеть сумму Order1 для себя и каждой записи, которая имеет значение Date в течение четырех недель до первичной записи. Здесь вы идете:

create table MysteryTable 
(
    PurchasingId int not null primary key identity(1,1), 
    Order1 money not null, 
    [Date] date not null 
) 

insert MysteryTable(Order1, [Date]) values (1.00, '2013-04-21') 
insert MysteryTable(Order1, [Date]) values (2.00, '2013-04-14') 
insert MysteryTable(Order1, [Date]) values (3.00, '2013-04-07') 
insert MysteryTable(Order1, [Date]) values (4.00, '2013-03-31') 
insert MysteryTable(Order1, [Date]) values (5.00, '2013-03-24') 

select 
    t1.PurchasingId 
    , t1.Order1 
    , t1.Date 
    , SUM(ISNULL(t2.Order1, 0)) FourWeekTotal 
from 
    MysteryTable t1 
    left outer join MysteryTable t2 
    on DATEADD(ww, -4, t1.Date) <= t2.Date and t1.Date > t2.Date 
group by 
    t1.PurchasingId 
    , t1.Order1 
    , t1.Date 
order by 
    t1.Date desc 

Объяснение:

Присоединяйтесь к таблице на себя, t1, представляющий записи вернуться, t2 быть записи в совокупности. Присоединяйся к дате t1 минус четыре недели, будучи меньше или равным дате t2, а дата t1 больше, чем Дата t2. Затем группируйте записи по полям t1 и сумме t2.Order1. Левое внешнее соединение должно учитывать одну запись, которая не будет иметь никаких предыдущих данных.

+0

, но я даже не могу найти сумму, которая работает с этими результатами по вашему запросу - и она возвращает 7 из моих 11 закупочных рядов. Мне нужно, чтобы все они были возвращены с предыдущей 4-недельной суммой заказов (не включая текущий). Я упростил приведенные выше данные, если это помогает – Colbs

+0

oops my bad, мое предложение on неверно. слишком сонный: P обновляется сейчас. Кстати, на основе ваших данных образца ваша четырехнедельная сумма не включает значение Order1 текущей записи, верно ли это? – Moho

+0

программисты не спят! это верно, текущий Order1 не включен – Colbs

0

Попробуйте это ...

Declare @LBDate date 
SET @LBDate = DATEADD(d,-28,getdate()) 

Теперь напишите ур запрос на выборку. ..

Select * from Orders where Date between @LBDate and Getdate() 

Вы также можете использовать требуемую дату вместо текущей даты ..

+0

это возвращает первый ряд – Colbs

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