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

Откуда:
Сообщений: 1090
Прошу помощи
Есть таблица содержащая такие блоки
PartID Zone AC
387 3150 0126
387 3150 0157
387 3150 0157
387 3150 0277
387 3150 0277
387 3150 0292
387 3150 0292


В итоговой выборке нужно получить (на примере этого)
PartID Zone
387 3150
387 3150


Т.е. выбрать записи {PartID,Zone} в количестве равном максимальному числу записей в группе {PartID,Zone,AC}
Сиквел - 2008
23 мар 17, 17:29    [20326947]     Ответить | Цитировать Сообщить модератору
 Re: отфильтровать группы  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
waszkiewicz,

автор
в количестве равном максимальному числу записей в группе {PartID,Zone,AC}

SELECT PartID,Zone FROM TABLE
23 мар 17, 17:38    [20326969]     Ответить | Цитировать Сообщить модератору
 Re: отфильтровать группы  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
with d as (
select 
387 partID, 3150 ZONE, '0126' AC
union all 
select 387, 3150, '0157' 
union all 
select 387, 3150, '0157'
union all 
select 387, 3150, '0277'
union all 
select 387, 3150, '0277' 
union all 
select 387, 3150, '0292' 
union all 
select 387, 3150, '0292' 
),
dd as 
( select k.rn mr,partID,ZONE from
	(select ROW_NUMBER()  over (partition by AC order by partID,ZONE,AC) rn,
	partID,
	ZONE
	from d) k
	group by  k.rn,partID,ZONE
	)
select partID,ZONE from dd
23 мар 17, 17:55    [20327013]     Ответить | Цитировать Сообщить модератору
 Re: отфильтровать группы  [new]
o-o
Guest
declare @t table (PartID int,	Zone int,	AC int);
insert into @t values
(387,	3150,	0126),
(387,	3150,	0157),
(387,	3150,	0157),
(387,	3150,	0277),
(387,	3150,	0277),
(387,	3150,	0292),
(387,	3150,	0292),

(388,	3150,	0292),
(388,	3150,	0293);


with cnt_all as
(
select PartID,Zone,AC, COUNT(*) as cnt
from @t
group by PartID,Zone,AC
)

,cnt_max as
(
select PartID,Zone, max(cnt) as cnt
from cnt_all
group by PartID,Zone
)

select PartID,Zone
from cnt_max
cross apply (select *
             from master..spt_values
             where type = 'P'
                   and number between 1 and cnt) a;
23 мар 17, 17:57    [20327018]     Ответить | Цитировать Сообщить модератору
 Re: отфильтровать группы  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Шыфл

(select ROW_NUMBER()  over (partition by AC order by partID,ZONE,AC) rn,


читать как
(select ROW_NUMBER()  over (partition by partID,ZONE,AC order by partID,ZONE,AC) rn,
23 мар 17, 17:58    [20327024]     Ответить | Цитировать Сообщить модератору
 Re: отфильтровать группы  [new]
Добрый Э - Эх
Guest
waszkiewicz,

Dense_rank
23 мар 17, 18:01    [20327037]     Ответить | Цитировать Сообщить модератору
 Re: отфильтровать группы  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1090
o-o,

спасибо
23 мар 17, 19:12    [20327237]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить