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

Откуда: ***
Сообщений: 474
Доброго времени суток !
Имеется следующая табличка
дата сумма кол-дней
17.06.2010 1074.99 NULL
18.06.2010 0.00 NULL
17.09.2010 1222.90 NULL
25.09.2010 0.00 NULL
17.11.2010 1332.84 NULL
25.11.2010 0.00 NULL
17.12.2010 1421.31 NULL
24.12.2010 0.00 NULL
17.01.2011 1452.37 NULL
17.02.2011 2967.77 NULL
18.02.2011 909.84 NULL
01.03.2011 0.00 NULL
17.03.2011 1654.61 NULL
19.03.2011 0.00 NULL
17.04.2011 1652.98 NULL
29.04.2011 0.00 NULL


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

дата сумма кол-дней
17.06.2010 1074.99 NULL
18.06.2010 0.00 1
17.09.2010 1222.90 NULL
25.09.2010 0.00 8
17.11.2010 1332.84 NULL
25.11.2010 0.00 8
17.12.2010 1421.31 NULL
24.12.2010 0.00 7
17.01.2011 1452.37 NULL
17.02.2011 2967.77 NULL
18.02.2011 909.84 NULL
01.03.2011 0.00 43
17.03.2011 1654.61 NULL
19.03.2011 0.00 2
17.04.2011 1652.98 NULL
29.04.2011 0.00 12


Можно ли, предварительно подсчитав количество дней, сделать UPDATE поля "кол-дней" не используя курсоры?
13 май 11, 20:31    [10650440]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать разность дат и результат записать в таблицу  [new]
andMegaM
Member

Откуда: ***
Сообщений: 474
Забыл написать что имеется возможность пронумеровать записи, т.е. получить вот такую табличку
дата сумма кол-дней
117.06.2010 1074.99 NULL
218.06.2010 0.00 NULL
317.09.2010 1222.90 NULL
425.09.2010 0.00 NULL
517.11.2010 1332.84 NULL
625.11.2010 0.00 NULL
717.12.2010 1421.31 NULL
824.12.2010 0.00 NULL
917.01.2011 1452.37 NULL
1017.02.2011 2967.77 NULL
1118.02.2011 909.84 NULL
1201.03.2011 0.00 NULL
1317.03.2011 1654.61 NULL
1419.03.2011 0.00 NULL
1517.04.2011 1652.98 NULL
1629.04.2011 0.00 NULL
13 май 11, 20:52    [10650494]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать разность дат и результат записать в таблицу  [new]
iljy
Member

Откуда:
Сообщений: 8711
andMegaM,

set dateformat dmy
declare @t table (dt date, s numeric(6,2), d int)
insert @t values
('17.06.2010',1074.99,NULL),
('18.06.2010',0.00,NULL),
('17.09.2010',1222.90,NULL),
('25.09.2010',0.00,NULL),
('17.11.2010',1332.84,NULL),
('25.11.2010',0.00,NULL),
('17.12.2010',1421.31,NULL),
('24.12.2010',0.00,NULL),
('17.01.2011',1452.37,NULL),
('17.02.2011',2967.77,NULL),
('18.02.2011',909.84,NULL),
('01.03.2011',0.00,NULL),
('17.03.2011',1654.61,NULL),
('19.03.2011',0.00,NULL),
('17.04.2011',1652.98,NULL),
('29.04.2011',0.00,NULL)

update t
set d=DATEDIFF(d, mi, dt)
from(
	select *, MIN(dt) over(partition by r) mi
	from(
		select *, DENSE_RANK() over(partition by sign(s) order by rn2-rn1) r
		from(
			select *, ROW_NUMBER() over(partition by sign(s) order by dt) rn1,
				ROW_NUMBER() over(order by dt) rn2
			from @t
		)t
	)t
)t
where s=0.00

select * from @t
13 май 11, 21:03    [10650517]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать разность дат и результат записать в таблицу  [new]
andMegaM
Member

Откуда: ***
Сообщений: 474
Спасибо.
К сожалению, у меня дома стоит MS SQL SERWER 2000 и на нем функции
DENSE_RANK() и ROW_NUMBER() не работают. На работе обязательно попробую
13 май 11, 21:13    [10650541]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать разность дат и результат записать в таблицу  [new]
iljy
Member

Откуда:
Сообщений: 8711
andMegaM
Спасибо.
К сожалению, у меня дома стоит MS SQL SERWER 2000 и на нем функции
DENSE_RANK() и ROW_NUMBER() не работают. На работе обязательно попробую

? Так поставьте дома экспресс 2008. Раз у вас на работе старшая версия - чего дома-то 2000 держать!
13 май 11, 21:15    [10650548]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать разность дат и результат записать в таблицу  [new]
andMegaM
Member

Откуда: ***
Сообщений: 474
Так и сделаю.
13 май 11, 21:19    [10650558]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить