Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Евгенич 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] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
Как под тебя задача писана... |
23 дек 13, 15:58 [15334773] Ответить | Цитировать Сообщить модератору |
Евгенич Member Откуда: Сообщений: 269 |
Её уже читал, только никак не догоню - у меня ведь ДВЕ группы - DealID и месяц - среди них max Дата, а в посте ОДНА группа Клиент - среди них max Дата! Помогите..... |
||
23 дек 13, 16:23 [15334940] Ответить | Цитировать Сообщить модератору |
Мистер Хенки Member Откуда: канализация Сообщений: 6615 |
Евгенич, группируйте по dealId и месяцу, ищите дату последнего платежа (масимальная дата) , ищите записи с таким dealId и с такой датой. |
23 дек 13, 16:32 [15335014] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Евгенич 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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Евгенич Member Откуда: Сообщений: 269 |
sdet, а как же dateadd(month,datediff(month,0,[Date]),0)) если разные года? |
23 дек 13, 17:00 [15335218] Ответить | Цитировать Сообщить модератору |
sdet Member Откуда: Сообщений: 463 |
И что? |
||
23 дек 13, 17:06 [15335267] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |