Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Пересекающие периоды и подсчет суммы  [new]
Зимапришла
Guest
declare @table as table (period_begin date
							,period_end date
							,value int
							,parent_id int
							)


insert into  @table
	(
	period_begin
	,period_end
	,value
	,parent_id
	)
select
	'20110101'
	,'20110228'
	,10
	,1
union all
select
	'20110301'
	,'20110430'
	,20
	,1
union all
select
	'20110201'
	,'20110401'
	,15
	,2
	
	
select
*
from @table
where
	period_begin<='20110531' and period_end>='20110101'

На выходе хочу получить максимальную сумму пересекающихся по периоду value разных parent_id, не могу сообразить в какую сторону рыть?
Т.е. по примеру должно получиться 35,т.к. последние две строки пересекаются по периоду и в сумме дают
1 дек 11, 16:51    [11690978]     Ответить | Цитировать Сообщить модератору
 Re: Пересекающие периоды и подсчет суммы  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
Возможно, в решении этой задачи Вам поможет join с таблицей-календарем
1 дек 11, 16:54    [11691001]     Ответить | Цитировать Сообщить модератору
 Re: Пересекающие периоды и подсчет суммы  [new]
aleks2
Guest
Паганель
Возможно, в решении этой задачи Вам поможет join с таблицей-календарем

Избыточно и неэффективно на длинных периодах. Достаточно рассмотреть только даты начал и концов.
1 дек 11, 16:58    [11691033]     Ответить | Цитировать Сообщить модератору
 Re: Пересекающие периоды и подсчет суммы  [new]
Зимапришла
Guest
Эт все отлично, можно еще немного намеков, я чет не совсем понимаю как я сгруппирую данные так чтобы получилось то что нужно даже если сджоиню таблицу календаря
1 дек 11, 16:59    [11691043]     Ответить | Цитировать Сообщить модератору
 Re: Пересекающие периоды и подсчет суммы  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
Зимапришла
даже если сджоиню таблицу календаря
а потом гляньте количество уникальных parent_id в каждой дате
1 дек 11, 17:02    [11691078]     Ответить | Цитировать Сообщить модератору
 Re: Пересекающие периоды и подсчет суммы  [new]
aleks2
Guest
declare @table as table (period_begin date
							,period_end date
							,value int
							,parent_id int
							)


insert into  @table
	(
	period_begin
	,period_end
	,value
	,parent_id
	)
select
	'20110101'
	,'20110228'
	,10
	,1
union all
select
	'20110301'
	,'20110430'
	,20
	,1
union all
select
	'20110201'
	,'20110401'
	,15
	,2
	
;with 
alldates as (
  select period_begin [date] from @table
  union
  select period_end [date] from @table
  )
  select a.[date], SUM(t.value) Val
  from alldates a inner join @table t on a.[date] between t.period_begin and t.period_end
  group by a.[date]
  order by SUM(t.value) DESC

1 дек 11, 17:09    [11691148]     Ответить | Цитировать Сообщить модератору
 Re: Пересекающие периоды и подсчет суммы  [new]
Зимапришла
Guest
Спасибо, буду разбираться
1 дек 11, 17:12    [11691176]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить