2015-12-21 3 views
1

Я объясню свой вопрос на практическом примере, чтобы было легче визуализировать проблему. У меня есть построить этот запрос:Макс. Счет SQL Server

Select 
    E.Tipo_Esp, F.Nome, F.Apelido, 
    count (Ac.id_acto) as total_consultas 
from 
    Especialidade as E 
right join 
    Funcionario as F on F.id_Esp = E.id_Esp 
inner join 
    Acto as Ac on Ac.id_func = F.id_func 
inner join 
    TipoActo as TA on TA.id_Tipo_acto = Ac.id_Tipo_acto 
where 
    TA.Descricao_Acto = 'Consulta' 
group by 
    E.Tipo_Esp, F.Nome, F.Apelido 
order by 
    count(Ac.id_acto) DESC 

прибыть к следующему результату:

Tipo_Esp Nome Apelido total_consultas 
Ortopedia Maria Antonia 3 
Ortopedia Luis Cruz  1 
Cirurgia André Martins 2 
Cirurgia Diogo Martins 1 

Однако то, что мне нужно, чтобы прибыть это:

Tipo_Esp Nome Apelido total_consultas 
Ortopedia Maria Antonia 3 
Cirurgia André Martins 2 

означает, мне нужно только высокий счет для каждого «Tipo_Esp». Я попытался применить функцию max count с указанным выше запросом в качестве подзапроса, но все прошло хорошо, как ожидалось. Может кто-нибудь поможет мне в этом вопросе, пожалуйста? спасибо заранее

ответ

0

Вы можете сделать это:

with orig as (
    Select E.Tipo_Esp, F.Nome, F.Apelido, count (Ac.id_acto) as total_consultas from 
    Especialidade as E 
    right join Funcionario as F on F.id_Esp = E.id_Esp 
    inner join Acto as Ac on Ac.id_func = F.id_func 
    inner join TipoActo as TA on TA.id_Tipo_acto = Ac.id_Tipo_acto 
    WHERE TA.Descricao_Acto = 'Consulta' 
    GROUP BY E.Tipo_Esp, F.Nome, F.Apelido 
    ORDER BY count(Ac.id_acto) DESC 
) 
select o.* 
from orig o 
inner join (
    select tipo_esp, max(total_consultas) as maxtotal 
    from orig 
    group by tipo_esp 
) t on o.tipo_esp = t.tipo_esp and o.total_consultas = t.maxtotal 
Смежные вопросы