Jump to content
jmta_92

[Resolvido] 3 melhores registos por equipa

Recommended Posts

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

Edited by pmg
Formatacao, GeSHi

Share this post


Link to post
Share on other 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."

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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."

Share this post


Link to post
Share on other 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

Edited by pmg
GeSHi

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.