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

Откуда:
Сообщений: 269
Коллеги, помогите решить задачу. SQL 2000.

create table #dataset (
			DealID numeric(15,0) --договор
			,[Date] smalldatetime  --дата платежа
			,Rest numeric(28,10) --сумма платежа
		       ) 

insert into #dataset (DealID,[Date],Rest) select '966585','2012-10-01','1500000.0000000000'
insert into #dataset (DealID,[Date],Rest) select '966585','2012-11-22','1250000.0000000000'
insert into #dataset (DealID,[Date],Rest) select '966585','2012-11-29','100000.0000000000'
insert into #dataset (DealID,[Date],Rest) select '966585','2013-02-26','96227.0000000000'


Помогите для каждого DealID найти сумму последнего платежа в каждом месяце
(результирующий селект должен вернуть 1,2 и 4 строки)

PS . MSSQL 2000 Server
23 дек 13, 15:57    [15334763]     Ответить | Цитировать Сообщить модератору
 Re: Последний платеж за месяц  [new]
Добрый Э - Эх
Guest
Как под тебя задача писана...
23 дек 13, 15:58    [15334773]     Ответить | Цитировать Сообщить модератору
 Re: Последний платеж за месяц  [new]
Евгенич
Member

Откуда:
Сообщений: 269
Добрый Э - Эх
Как под тебя задача писана...


Её уже читал, только никак не догоню - у меня ведь ДВЕ группы - DealID и месяц - среди них max Дата, а в посте ОДНА группа Клиент - среди них max Дата! Помогите.....
23 дек 13, 16:23    [15334940]     Ответить | Цитировать Сообщить модератору
 Re: Последний платеж за месяц  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Евгенич,
группируйте по dealId и месяцу, ищите дату последнего платежа (масимальная дата) , ищите записи с таким dealId и с такой датой.
23 дек 13, 16:32    [15335014]     Ответить | Цитировать Сообщить модератору
 Re: Последний платеж за месяц  [new]
sdet
Member

Откуда:
Сообщений: 463
Евгенич,

Что-то типа
select ds.DealID, ds.[Date], ds.Rest  from #dataset ds
join (select DealID, max([Date]) as dat from #dataset group by DealID,dateadd(month,datediff(month,0,[Date]),0)) t
on ds.DealID=t.DealID and ds.[Date]=t.dat
23 дек 13, 16:57    [15335187]     Ответить | Цитировать Сообщить модератору
 Re: Последний платеж за месяц  [new]
Евгенич
Member

Откуда:
Сообщений: 269
Мистер Хенки, вроде получилось, пасип - ключевым в Вашей подсказке было "с таким dealId и с такой датой" сделал так:

select d1.DealID
	,d1.[Date]
	,Rest from #dataset d1
join (select DealID,cast(datepart(mm,[Date]) as varchar)+cast(datepart(yyyy,[Date]) as varchar) Period,max([Date]) maxDate from #dataset
	 	group by DealID,cast(datepart(mm,[Date]) as varchar)+cast(datepart(yyyy,[Date]) as varchar) 
		) d2

on (d1.DealID=d2.DealID)and(d1.[Date]=d2.maxDate)

order by d1.DealID,d1.[date] 
23 дек 13, 16:57    [15335189]     Ответить | Цитировать Сообщить модератору
 Re: Последний платеж за месяц  [new]
prog882
Guest
Евгенич,

select * 
from @dataset t1
join (
select t.DealID, [Date]=max(t.Date)
from @dataset t
group by t.DealID, year(t.Date), month(t.Date)
) t2 on t1.DealID = t2.DealID and t1.Date = t2.Date
23 дек 13, 17:00    [15335217]     Ответить | Цитировать Сообщить модератору
 Re: Последний платеж за месяц  [new]
Евгенич
Member

Откуда:
Сообщений: 269
sdet, а как же dateadd(month,datediff(month,0,[Date]),0)) если разные года?
23 дек 13, 17:00    [15335218]     Ответить | Цитировать Сообщить модератору
 Re: Последний платеж за месяц  [new]
sdet
Member

Откуда:
Сообщений: 463
Евгенич
sdet, а как же dateadd(month,datediff(month,0,[Date]),0)) если разные года?

И что?
23 дек 13, 17:06    [15335267]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить