jmta_92 Posted May 7, 2013 at 12:50 AM Report #506001 Posted May 7, 2013 at 12:50 AM (edited) 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 May 7, 2013 at 09:40 AM by pmg Formatacao, GeSHi
pikax Posted May 7, 2013 at 09:26 AM Report #506024 Posted May 7, 2013 at 09:26 AM 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."
jmta_92 Posted May 7, 2013 at 01:55 PM Author Report #506089 Posted May 7, 2013 at 01:55 PM 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
pikax Posted May 7, 2013 at 02:05 PM Report #506094 Posted May 7, 2013 at 02:05 PM 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."
jmta_92 Posted May 7, 2013 at 03:33 PM Author Report #506120 Posted May 7, 2013 at 03:33 PM (edited) 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 May 7, 2013 at 03:46 PM by pmg GeSHi
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now