Array
(
)

3 melhores registos por equipa

Jose Alves
   - 16 abr 2013

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

Joel Rodrigues
   - 16 abr 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:
#Código

SELECT TOP 3 NOME FROM JOGADORES ORDER BY PONTUACAO DESC

Boa sorte.

0
|
0

Jose Alves
   - 17 abr 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

0
|
0

Alex Lekao
   - 17 abr 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

0
|
0

Jose Alves
   - 02 mai 2013

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

0
|
0

José
   - 17 ago 2013

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

0
|
0

José
   - 17 ago 2013


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

Obrigado.

0
|
0

Jose Alves
   - 18 ago 2013

sim, a solução estava no cross apply

fica aqui um exemplo do meu caso

#Código

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

0
|
0

Alex Lekao
   - 19 ago 2013

Cross Apply...

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

obrigado.

Abraco.

Alex - Lekao

0
|
0

José
   - 19 ago 2013

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

TÓPICO CONCLUÍDO.

0
|
0