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

Откуда:
Сообщений: 12
Добрый вечер.
Помогите пожалуйста с простым запросом.

create table Temp(
Name varchar(50) not null,
StartDate smalldatetime not null,
FinishDate smalldatetime not null,
Ras int not null, Ost int not null)

insert Temp values('a', '20110901', '20110902', 10, 20)
insert Temp values('a', '20110903', '20110904', 4, 30)
insert Temp values('b', '20110901', '20110902', 1, 2)
insert Temp values('b', '20110903', '20110904', 3, 4)
insert Temp values('c', '20110901', '20110902', 15, 30)
insert Temp values('d', '20110903', '20110904', 20, 40)

Требуется для каждого Name получить sum(Ras) и по максимальному FinishDate получить Ost.
Т.е. результат должен быть:
16 окт 11, 20:15    [11448531]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуста с простым запросом с группировкой.  [new]
Воротник
Member

Откуда:
Сообщений: 12
Воротник,


'a', 14, 30
'b', 4, 3)
'c', 15, 30)
'd', 20, 40)

Очень желательно с вложенными запросами без JOIN с самим собой, поскольку таблица по сути сама является результатом вложенного запроса.
Спасибо.

P.S. Сорри за разбитие вопроса на 2 части, это был миссклик...
16 окт 11, 20:18    [11448536]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуста с простым запросом с группировкой.  [new]
AndreTM
Member

Откуда: Где-то в вологодских лесах...
Сообщений: 6900
Воротник,

'b', 4, 3) - мотивируйте?
16 окт 11, 20:26    [11448543]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуста с простым запросом с группировкой.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31950
Воротник
Очень желательно с вложенными запросами без JOIN с самим собой, поскольку таблица по сути сама является результатом вложенного запроса.
А с CTE можно?
16 окт 11, 20:28    [11448545]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуста с простым запросом с группировкой.  [new]
ё
Guest
select t1.*,
(select sum(t2.Ras) from Temp t2 where t1.Name=t2.Name) as xz
from Temp t1
where t1.FinishDate = (select max(FinishDate) from Temp t2 where t1.Name=t2.Name)
order by t1.Name
16 окт 11, 20:30    [11448546]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуста с простым запросом с группировкой.  [new]
iljy
Member

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

declare @Temp table(
Name varchar(50) not null,
StartDate smalldatetime not null,
FinishDate smalldatetime not null,
Ras int not null, Ost int not null)

insert @Temp values('a', '20110901', '20110902', 10, 20),('a', '20110903', '20110904', 4, 30),
					('b', '20110901', '20110902', 1, 2),('b', '20110903', '20110904', 3, 4),
					('c', '20110901', '20110902', 15, 30),('d', '20110903', '20110904', 20, 40)
					
select Name, SUM(Ras) s, cast(MAX(cast(datediff(mi, 0, FinishDate) as bigint) * 0x80000000 + Ost) & 0xffffffff as int) o
from @Temp
group by Name
16 окт 11, 20:36    [11448566]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуста с простым запросом с группировкой.  [new]
Воротник
Member

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

Простите, конечно же 'b', 4, 4
16 окт 11, 20:37    [11448569]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуста с простым запросом с группировкой.  [new]
Воротник
Member

Откуда:
Сообщений: 12
ё и iljy большое спасибо! Подходят оба варианта.
16 окт 11, 20:42    [11448576]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуста с простым запросом с группировкой.  [new]
iljy
Member

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

сказали же, что с подзапросами нельзя! Тогда вот еще варианты
select Name, SUM(Ras) s, (select top 1 Ost from @Temp t2 where t2.Name = t1.Name order by t2.FinishDate desc)
from @Temp t1
group by Name

select Name, SUM(Ras) s, (select Ost from @Temp t2 where t2.Name = t1.Name and t2.FinishDate =  MAX(t1.FinishDate))
from @Temp t1
group by Name
16 окт 11, 20:58    [11448589]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуста с простым запросом с группировкой.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31950
iljy
сказали же, что с подзапросами нельзя! Тогда вот еще варианты
Ага, с подзапросами то каждый может!


;with cte as (
select	*, 
		ROW_NUMBER() over(partition by name order by finishdate) as row
from Temp 
)
select * 
from cte c1
	join (
		select	name, 
		SUM(Ras) as Ras
		from Temp 
		group by name
	) c2 on c2.Name = c1.Name
where c1.row = 1
16 окт 11, 21:02    [11448593]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить