2013-07-22 4 views
1

Я не уверен, возможно ли это - у меня возникают проблемы с моей головой.Сравнить 2 подмножества данных из таблицы?

Это график продукта, показывающий, сколько мы ожидаем доставить на данную дату. Данные импортируются в это расписание еженедельно, что создает новую запись.

Например, если расписание на день в настоящее время составляет 10, а также импортировать 15, новая строка вставляется с 5 Кол-во, в результате чего сумма до 15.

Данные, которые я имею, как так:

Product | Delivery Required Date | Qty 
Prod1 |  1/1/13   | 10 
Prod1 |  1/1/13   | -10 
Prod1 |  1/1/13   | 10 
Prod1 |  1/1/13   | -10 
Prod1 |  1/1/13   | 25 

Я хочу создать запрос, который показывает разницу между предыдущим расписанием и текущим расписанием.

Например, запрос будет суммировать все строки «Qty», исключая последнюю запись, и сравнить их с последней записью. В приведенных выше данных разница составляет 25 (существующее общее количество было 0, последняя запись - 25, 0 + 25 = 25).

Возможно ли это?

Благодаря

+0

У вас есть первичный ключ на этом столе? (Каждая запись имеет уникальный идентификационный номер)? Это облегчит запрос LOT. –

+0

Да, да, я упростил данные в этом примере извините. «Entry No» - это ПК. У меня была мысль, возможно, расчет может быть: Сумма всех строк, минус 2 * Кол-во последних строк? Если это облегчит – user2401849

ответ

0

Я подозреваю there'a лучший ответ, используя общие табличные выражения, но быстро & некрасиво решение может быть

select sum(case when EntryNo <> MAX(EntryNo) then Qty else 0 end) as 'sumLessLast' 
from MyTable 

Если MyTable имеет в нем миллион строк вы хотите лучше решение.

0

SqlServer 2005 и 2008:

;with r1 as (
    select DeliveryReqDate, sum(Qty) as TotalQty 
    from TableName 
    group by DeliveryReqDate) 
, r2 as (
    select DeliveryReqDate, Qty 
     , row_number() over (partition by DeliveryReqDate order by EntryNo desc) rn 
    from TableName) 
select r1.DeliveryReqDate, r1.TotalQty, r2.Qty as LastQty 
    , r1.TotalQty - r2.Qty as TotalButLastQty 
from r1 
    join r2 on r2.DeliveryReqDate = r1.DeliveryReqDate and r2.rn = 1 

SqlServer 2012

;with r1 as (
    select DeliveryReqDate, Qty 
     , sum(Qty) over (partition by DeliveryReqDate) as TotalQty 
     , row_number() over (partition by DeliveryReqDate order by EntryNo desc) rn 
from TableName) 
select DeliveryReqDate, TotalQty, Qty as LastQty 
    , TotalQty - Qty as TotalButLastQty 
from r1 
where rn = 1 

Я не уверен, что я полностью понимаю логику в отношении учета продукта и даты, но я надеюсь, что вы можете адаптировать выше запросы к вашим потребностям.

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