Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

leandroauler

[Resolvido] Select

Recommended Posts

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???

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.