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

Откуда: Москва
Сообщений: 188
добрый день, не подскажите с группировкой
(mssql2005)

есть запрос

select var_name, mail_id, var_value 
from lsdbo.wf_map_vars_mail_v
where lsdbo.wf_map_vars_mail_v.map_id = 100007305700017

результат

idCard	2587	100007305700017
idCard 2588 100007305700017
msg 2587 '11 работы'
msg 2588 '11234 работы'

как сделать группировку чтобы остались только значения с мах mail_id, для строк с одинаковыми значениями колонки var_name ? чтобы получилось

idCard	2588	100007305700017
msg 2588 '11234 работы'
14 янв 13, 09:50    [13764664]     Ответить | Цитировать Сообщить модератору
 Re: как сделать группировку по двум полям одно из которых дополнительно отобрать по max?  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
select top(1) with ties *
from lsdbo.wf_map_vars_mail_v
where map_id = 100007305700017
order by row_number()over(partition by var_name order by mail_id desc);
14 янв 13, 09:56    [13764697]     Ответить | Цитировать Сообщить модератору
 Re: как сделать группировку по двум полям одно из которых дополнительно отобрать по max?  [new]
ef1
Member

Откуда: Москва
Сообщений: 188
СПАСИБО!
14 янв 13, 09:57    [13764705]     Ответить | Цитировать Сообщить модератору
 Re: как сделать группировку по двум полям одно из которых дополнительно отобрать по max?  [new]
mike909
Member

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

select top 1 WITH TIES var_name, mail_id, var_value
from lsdbo.wf_map_vars_mail_v
where lsdbo.wf_map_vars_mail_v.map_id = 100007305700017
order by row_number() over(partition by mail_id order by mail_id desc)
14 янв 13, 09:57    [13764708]     Ответить | Цитировать Сообщить модератору
 Re: как сделать группировку по двум полям одно из которых дополнительно отобрать по max?  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
ef1,

select var_name, mail_id, var_value
from
(
select var_name, mail_id, var_value,
rn=row_number() over (partition by map_id, order by var_value, mail_id desc)
from lsdbo.wf_map_vars_mail_v
) t
where rn=1
--and map_id = 100007305700017


комментарий с and уберите, если действительно нужна фильтрация именно по этому полю
14 янв 13, 10:00    [13764726]     Ответить | Цитировать Сообщить модератору
 Re: как сделать группировку по двум полям одно из которых дополнительно отобрать по max?  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Алексей Куренков
ef1,

select var_name, mail_id, var_value
from
(
select var_name, mail_id, var_value,
rn=row_number() over (partition by map_id, order by var_value, mail_id desc)
from lsdbo.wf_map_vars_mail_v
) t
where rn=1
--and map_id = 100007305700017


комментарий с and уберите, если действительно нужна фильтрация именно по этому полю


сори не увидел var_name ))))

select var_name, mail_id, var_value
from
(
select var_name, mail_id, var_value,
rn=row_number() over (partition by map_id, order by var_name, mail_id desc)
from lsdbo.wf_map_vars_mail_v
) t
where rn=1
--and map_id = 100007305700017
14 янв 13, 10:03    [13764744]     Ответить | Цитировать Сообщить модератору
 Re: как сделать группировку по двум полям одно из которых дополнительно отобрать по max?  [new]
ef1
Member

Откуда: Москва
Сообщений: 188
Огромное спасибо всем!!!!
14 янв 13, 10:09    [13764778]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить