Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera,
Tenho a seguinte tabela passageiros:
Id
Data
Hora (Segundos)
Motorista
NumeroCartao
Aplicacao
AplicacaoEmissor
Preciso fazer um select onde a Quantidade de utilização do Cartão com o mesmo motorista seja Maior que 3 vezes.
Fiz o seguinte select:
SELECT
COUNT(*) AS Quantidade,
g.Id,
g.Data,
gp.Data,
sec_to_time(g.Hora) AS HORARIO,
g.NumeroCartao,
gp.NumeroCartao,
g.Motorista,
gp.Motorista
FROM
passageiros p, passageiros gp
WHERE
g.Data Between '2009-09-01' AND '2009-09-01' AND
gp.Data Between '2009-09-01' AND '2009-09-01' AND
g.NumeroCartao = gp.NumeroCartao AND
g.Motorista = gp.Motorista
GROUP BY g.NumeroCartao HAVING Quantidade > 3
Além da query está lenta está duplicando os resultados..
Alguém sabe como me ajudar???
>
SELECT count(NumeroCartao)>3 as Quantidade, Id , Data, sec_to_time(Hora) AS HORARIO, NumeroCartao,
Motorista FROM passageiros WHERE Data BETWEEN '2009-09-01' AND '2009-09-01' Group By NumeroCartao order by Id ASC
mais se for apenas os registro de um dia não precisa colocar BETWEEN
e sim apenas
SELECT count(NumeroCartao)>3 as Quantidade, Id , Data, sec_to_time(Hora) AS HORARIO, NumeroCartao,
Motorista FROM passageiros WHERE Data = '2009-09-01' Group By NumeroCartao order by Id ASC
Macielcr7,
Obrigado pela ajuda, mas o select tem que ser Quantidade de utilização do Cartão com o mesmo motorista seja Maior que 3 vezes.
Exemplo:
>
Quantidade Id Data Cartao Motorista
1 1 2009-10-06 12345 1234563
1 2 2009-10-06 12333 1234987
4 3 2009-10-06 12987 1234567
SELECT
g.Id,
gp.Data,
gp.Motorista,
COUNT(*) AS Quantidade
FROM
passageiros p, passageiros gp
WHERE
g.Data Between '2009-09-01' AND '2009-09-01' AND
gp.Data Between '2009-09-01' AND '2009-09-01' AND
g.NumeroCartao = gp.NumeroCartao AND
g.Motorista = gp.Motorista
group by
g.Id,
gp.Data,
gp.Motorista
HAVING Quantidade > 3
O problema pode ser o agrupamento x o "having" , no agrupamento teria de ser no total requerido.
Exemplo acima totaliza por data.
Caso se precise de mais dados , obtenha os motoristas num subquery e os dados a serem listados na query principal.
>
SELECT
g.Id,
gp.Data,
gp.Motorista,
COUNT(*) AS Quantidade
FROM
passageiros p, passageiros gp
WHERE
g.Data Between '2009-09-01' AND '2009-09-01' AND
gp.Data Between '2009-09-01' AND '2009-09-01' AND
g.NumeroCartao = gp.NumeroCartao AND
g.Motorista = gp.Motorista
group by
g.Id,
gp.Data,
gp.Motorista
HAVING Quantidade > 3
O problema pode ser o agrupamento x o "having" , no agrupamento teria de ser no total requerido.
Exemplo acima totaliza por data.
Caso se precise de mais dados , obtenha os motoristas num subquery e os dados a serem listados na query principal.
Galera,
Obrigado pela ajuda, resolvido
Segue a solução:
SELECT Motorista,NumeroCartao, count(*) as Quantidade
FROM passageiros
WHERE Data = '2009-01-01'
ORDER BY Motorista,NumeroCartao
GROUP BY Motorista,NumeroCartao
HAVING count(*) > 3
SELECT count(NumeroCartao)>3 as Quantidade, Id , Data, sec_to_time(Hora) AS HORARIO, NumeroCartao,
Motorista FROM passageiros WHERE Data BETWEEN '2009-09-01' AND '2009-09-01' Group By NumeroCartao order by Id ASC
mais se for apenas os registro de um dia não precisa colocar BETWEEN
e sim apenas