3 melhores registos por equipa
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
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
Curtidas 0
Respostas
Joel Rodrigues
16/04/2013
Não olhei sua instrução SQL, mas acho que você pode utilizar o operador TOP para restringir a quantidade de registros. Por exemplo:
Boa sorte.
SELECT TOP 3 NOME FROM JOGADORES ORDER BY PONTUACAO DESC
Boa sorte.
GOSTEI 0
Jose Alves
16/04/2013
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
equipa 1
jogador1 10min
jogador1 10,5min
jogador2 11min
equipa 2
jogador 7 11min
jogador 7 12min
jogador 7 12,5min
GOSTEI 0
Alex Lekao
16/04/2013
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
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
GOSTEI 0
Jose Alves
16/04/2013
Boa tarde , isso eu já tentei fazer e não consegui, até ao momento o melhor que tenho é o código acima defenido.
GOSTEI 0
José
16/04/2013
Olá amigo José, teve algum avanço em relação a sua duvida, que possa compartilhar conosco ?
GOSTEI 0
José
16/04/2013
olá amigo josé, teve algum avanço em relação a sua duvida, que possa compartilhar conosco ?
Obrigado.
GOSTEI 0
Jose Alves
16/04/2013
sim, a solução estava no cross apply
fica aqui um exemplo do meu caso
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
GOSTEI 0
Alex Lekao
16/04/2013
Cross Apply...
isso eu nao conheco e nem tinha ouvido falar, interessante... pesquisar a respeito... rsrsr
obrigado.
Abraco.
Alex - Lekao
isso eu nao conheco e nem tinha ouvido falar, interessante... pesquisar a respeito... rsrsr
obrigado.
Abraco.
Alex - Lekao
GOSTEI 0
José
16/04/2013
Obrigado pelo retorno Jose, e por compartilhar a solução conosco.
Sendo assim estou finalizando o tópico.
TÓPICO CONCLUÍDO.
Sendo assim estou finalizando o tópico.
TÓPICO CONCLUÍDO.
GOSTEI 0