Ir para o conteúdo
jmta_92

[Resolvido] 3 melhores registos por equipa

Mensagens Recomendadas

jmta_92

ola pessoal, estou a elaborar um trabalho escolar que consiste numa prova de btt. Nesse trabalho tenho de atraves de indicar qual a melhor equipa. uma equipa pode ter 1 registo como muitos mais , mas para a classificação só contam os 3 melhores, ou seja se tiver menos a equipa não entra não classificação mas se tiver mais só conta os 3 melhores. Eu consegui criar um código que soma tudo e já tem a restrição dos 3 registos, mas o problema é que eu não quero tudo só quero os 3 melhores. Alguém me consegue dar uma ajuda sff?

SELECT SUM(datediff (ms,Percurso.horaPartida,Percurso.horaChegada) ) AS tempo, Equipa.Designacao


FROM Atleta INNER JOIN
Equipa ON Atleta.idEquipa = Equipa.IdEquipa INNER JOIN
Percurso ON Atleta.idAtleta = Percurso.idAltleta INNER JOIN
Mangas ON Percurso.idMangas = Mangas.idMangas,(

SELECT Equipa.Designacao,COUNT( Equipa.Designacao) AS nElem
FROM Atleta INNER JOIN
Percurso ON Atleta.idAtleta = Percurso.idAltleta INNER JOIN
Equipa ON Atleta.idEquipa = Equipa.IdEquipa
WHERE (Percurso.horaChegada IS NOT NULL)
GROUP BY Equipa.Designacao
having COUNT( Equipa.Designacao)>2
)AS nel
where Equipa.Designacao=nel.Designacao
GROUP BY Equipa.Designacao

Order BY tempo;

Obrigado,

alvesjose

Editado por pmg
Formatacao, GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

Faz um group by ou distinct para so' aparecer uma vez a equipa, e um TOP 3 para aparecer as 3 melhores


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jmta_92

mas assim so vai aparecer o melhor tempo das 3 melhores equipas. O que eu quero é tipo

equipa 1 - 10:30

equipa 2 - 10:31

equipa 1 - 11:40

equipa 1-11:41

equipa 3 - 12:15

equipa 2 - 12:32

n - n

os 3 melhores tempos por equipa para todas as equipas existentes com mais de 3 registos

nao as 3 equipas e o melhor tempo de cada

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

podes fazer um cross apply.

poderia ser algo assim:

SELECT e.Nome, t.Tempo
FROM Equipa e
	CROSS APPLY 
		(SELECT TOP 3 te.Tempo FROM TempoEquipas te WHERE te.EquipaID = e.ID ORDER BY Tempo ASC) as t
ORDER BY t.Tempo


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jmta_92

obrigado funcionou .

fica o codigo completo como queria para se alguem precisar

SELECT e.designacao as designacao, SUM(t.Tempo) as temp
       FROM Equipa e
               CROSS APPLY 
                       (SELECT TOP 3 datediff (ms,te.horaPartida ,te.horaChegada) AS tempo FROM Percurso te, Atleta at,dbo.ContarPercurso CNT WHERE te.idAltleta =at.idAtleta and at.idEquipa=e.IdEquipa and at.idEquipa=CNT.EquipaID ORDER BY Tempo ASC) AS t

       Group by e.designacao
Order by SUM(t.Tempo) ASC

Editado por pmg
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.