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

Откуда:
Сообщений: 18
Помогите составить запрос, никак не могу сам дойти.
К примеру есть таблица:

Поле1Поле2Поле3
1110
2211
3312
4111
5212
6310
7211
8112
940

Запрос должен вернуть значение Поле1 записи с максимальным Поле3 в группе Поле2, наверно совсем непонятно выразился, но результат должен быть следующий:

Поле1Поле2Поле3
8112
5212
3312
940
16 сен 09, 09:08    [7665134]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом с группировкой  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
SQL2005/2008
WITH CTE AS (SELECT ROW_NUMBER()OVER(PARTITION BY Поле2 ORDER BY Поле3 DESC) N, * FROM [таблица])
SELECT Поле1, Поле2, Поле3
FROM CTE
WHERE N=1
ORDER BY Поле1;
16 сен 09, 09:14    [7665156]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом с группировкой  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
declare @t table(id1 int, id2 int, id3 int)
insert into @t
select 1, 1, 10
union all
select 2, 2, 11 
union all
select 3, 3, 12 
union all
select 4, 1, 11 
union all
select 5, 2, 12 
union all
select 6, 3, 10 
union all
select 7, 2, 11 
union all
select 8, 1, 12 
union all
select 9, 4, 0 


select top 1 with ties * from @t 
order by row_number() over (partition by id2 order by id3 desc)
16 сен 09, 09:17    [7665171]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом с группировкой  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
ANSI SQL
select
	t1.Поле1
	, t2.*
from таблица t1
inner join
	(
	select
		max(Поле3) as Поле3
		, Поле2
	from таблица
	group by Поле2
	) t2 on t1.Поле2 = t2.Поле2
		and t1.Поле3 = t2.Поле3


Сообщение было отредактировано: 16 сен 09, 09:23
16 сен 09, 09:22    [7665193]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом с группировкой  [new]
Добрый Э - Эх
Guest
tpg
ANSI SQL
select
	t1.Поле1
	, t2.*
from таблица t1
inner join
	(
	select
		max(Поле3) as Поле3
		, Поле2
	from таблица
	group by Поле2
	) t2 on t1.Поле2 = t2.Поле2
		and t1.Поле3 = t2.Поле3

Анси ансе тоже рознь. Начиная с некоторого времени аналитические функции тоже стали частью анси. А ведь был когда-то бородатый стандарт, в котором не подразумевалось наличие встроенных представлений (derived-table, вложенных запросов и т.д.)
16 сен 09, 10:35    [7665614]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом с группировкой  [new]
Добрый Э - Эх
Guest
Как вариант:
declare @t table(id1 int, id2 int, id3 int)
insert into @t
select 1, 1, 10
union all
select 2, 2, 11 
union all
select 3, 3, 12 
union all
select 4, 1, 11 
union all
select 5, 2, 12 
union all
select 6, 3, 10 
union all
select 7, 2, 11 
union all
select 8, 1, 12 
union all
select 9, 4, 0 

select t0.* 
  from @t t0
  left join @t t1
    on t0.id2 = t1.id2
   and t0.id3 < t1.id3
 where t1.id1 is null
16 сен 09, 10:42    [7665681]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом с группировкой  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Добрый Э - Эх
Начиная с некоторого времени аналитические функции тоже стали частью анси.
Привет, Добрый Э - Эх!
Если не ошибаюсь, это началось в ANSI SQL99
16 сен 09, 10:45    [7665715]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить