Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Группировка определенного количества записей  [new]
eto_on
Guest
Есть таблица
IDValue
13
24
35
411
512
613
78
87
96

Нужно сгруппировать по три записи (в порядке нахождения в таблице) и найти в каждой тройке минимальное значение.
Т.е. результат селекта д.б. такой
Group_IDMin_Value
13
211
36

В идеале стредствами ansi sql и как можно проще т.е. одним селектом.
Заранее спасибо.
20 июн 13, 02:56    [14457204]     Ответить | Цитировать Сообщить модератору
 Re: Группировка определенного количества записей  [new]
Ennor Tiegael
Member

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

select ceiling(cast(row_number() over(order by Id) as numeric(12,1)) / 3) as [GroupId], min(Value)
from dbo.Table
group by ceiling(cast(row_number() over(order by Id) as numeric(12,1)) / 3);
Писал навскидку, возможны шероховатости, но идея в целом такая. Только быстрым это не будет, ибо агрегат по вычисляемому полю...
20 июн 13, 03:05    [14457208]     Ответить | Цитировать Сообщить модератору
 Re: Группировка определенного количества записей  [new]
eto_on
Guest
Не получается.
Вообще идея была сделать Inner join саму на себя и там далее сгруппировать и отфильтровать, но пока тоже не получилось.
20 июн 13, 03:30    [14457215]     Ответить | Цитировать Сообщить модератору
 Re: Группировка определенного количества записей  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3348
eto_on
Не получается.
Вообще идея была сделать Inner join саму на себя и там далее сгруппировать и отфильтровать, но пока тоже не получилось.
Пилятт, ну разумеется не получится, если запрос даже не запускать!
select sq.GroupId, min(sq.value)
from (
	select ceiling(cast(row_number() over(order by Id) as numeric(12,1)) / 3) as [GroupId], value
	from @t
	) sq
group by sq.GroupId;

Элементарно же, если прочесть сообщение об ошибке. Ну а если думать, что все должны поднести на блюдечке - тогда удивительно, как вы вопрос запостить на форум умудрились. Это же труд немеряный, думать надо, а от этого голова болит.
20 июн 13, 04:20    [14457229]     Ответить | Цитировать Сообщить модератору
 Re: Группировка определенного количества записей  [new]
serpentariy
Member

Откуда:
Сообщений: 265
select distinct dense_rank() over (order by (ID-1)/3),min(Value) over (partition by (ID-1)/3)
from [Есть таблица]
20 июн 13, 07:09    [14457296]     Ответить | Цитировать Сообщить модератору
 Re: Группировка определенного количества записей  [new]
=)8)
Guest
select (id+2)/3, min(value)
from table
group by (id+2)/3
20 июн 13, 07:26    [14457314]     Ответить | Цитировать Сообщить модератору
 Re: Группировка определенного количества записей  [new]
eto_on
Guest
Всем спасибо за ответы. Последний вариант самый элегантный, он то мне и был нужен :)
20 июн 13, 20:39    [14462239]     Ответить | Цитировать Сообщить модератору
 Re: Группировка определенного количества записей  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
eto_on
Последний вариант самый элегантный, он то мне и был нужен :)
А теперь проверьте как будет работать этот вариант, когда в ID будут "дырки".
20 июн 13, 20:54    [14462268]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить