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

т.е. есть

01-2009 - 500 кВт·ч
02-2009 - 800 кВт·ч
04-2009 - 1200 кВт·ч
06-2009 - 2000 кВт·ч

надо получить

01-2009 - 0 кВт·ч
02-2009 - 300 кВт·ч
04-2009 - 400 кВт·ч
06-2009 - 800 кВт·ч

в идеале неплохо бы еще узнать как можно малой кровью раскидать в среднем по месяцам (когда не хватает данных)

01-2009 - 0 кВт·ч
02-2009 - 300 кВт·ч
03-2009 - 200 кВт·ч
04-2009 - 200 кВт·ч
05-2009 - 400 кВт·ч
06-2009 - 400 кВт·ч

всем спасибо!
18 окт 09, 21:39    [7802521]     Ответить | Цитировать Сообщить модератору
 Re: Раскидать по месяцам  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
запрос2,

у вас проблемы с получением предыдущего (по отношению к нужной дате) показанию счетчика?

в любом случае - неплохо было бы получить DDL+тестовые данные.
18 окт 09, 22:12    [7802609]     Ответить | Цитировать Сообщить модератору
 Re: Раскидать по месяцам  [new]
iljy
Member

Откуда:
Сообщений: 8711
запрос2,
declare @t table(month int primary key, q float)
insert into @t
select 200901, 500 union all
select 200902, 800 union all
select 200904, 1200 union all
select 200906, 2001

select * from @t

select t.month, isnull((t.q - t1.q) / (t.month - t1.month), 0) from
@t t outer apply
(
	select top 1 * from @t
	where month < t.month
	order by month desc
)t1
	outer apply
(
	select number from master..spt_values
	where type = 'P' and number < t.month - t1.month
)t2
18 окт 09, 23:26    [7802763]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить