3 melhores registos por equipa

16/04/2013

0

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,
JALves
Jose Alves

Jose Alves

Responder

Posts

16/04/2013

Joel Rodrigues

Não olhei sua instrução SQL, mas acho que você pode utilizar o operador TOP para restringir a quantidade de registros. Por exemplo:
SELECT TOP 3 NOME FROM JOGADORES ORDER BY PONTUACAO DESC

Boa sorte.
Responder

17/04/2013

Jose Alves

Joel Rodrigues mas assim só me dá os 3 melhores tempos independentemente da equipa. O que pretendo é 3 melhores tempos por equipa, por exemplo,

equipa 1
jogador1 10min
jogador1 10,5min
jogador2 11min

equipa 2
jogador 7 11min
jogador 7 12min
jogador 7 12,5min

Responder

17/04/2013

Alex Lekao

Ola Jose, bom dia!!!

Pelo que estou percebendo provavelmente vc terá que usar um subselect para monstar o que vc precisa.

tente para ver se consegue algo.

Abraco.

Alex - Lekao
Responder

02/05/2013

Jose Alves

Boa tarde , isso eu já tentei fazer e não consegui, até ao momento o melhor que tenho é o código acima defenido.
Responder

17/08/2013

José

Olá amigo José, teve algum avanço em relação a sua duvida, que possa compartilhar conosco ?
Responder

17/08/2013

José

olá amigo josé, teve algum avanço em relação a sua duvida, que possa compartilhar conosco ?

Obrigado.
Responder

18/08/2013

Jose Alves

sim, a solução estava no cross apply

fica aqui um exemplo do meu caso

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
Responder

19/08/2013

Alex Lekao

Cross Apply...

isso eu nao conheco e nem tinha ouvido falar, interessante... pesquisar a respeito... rsrsr

obrigado.

Abraco.

Alex - Lekao
Responder

19/08/2013

José

Obrigado pelo retorno Jose, e por compartilhar a solução conosco.
Sendo assim estou finalizando o tópico.

TÓPICO CONCLUÍDO.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar