Sql

14 respostas
Flavio_machine

É o seguinte tenho uma tabela + ou - assim

id idClinte ******* data status
1 6 ******* 12/12/2010 parado
2 2 ******* 10/12/2010 ligado
3 3 ******* 13/12/2010 parado
4 2 ******* 10/12/2010 ligado
5 3 ******* 14/12/2010 movimento
6 2 ******* 10/12/2010 parado
7 5 ******* 16/12/2010 parado
8 2 ******* 10/12/2010 ligado
9 6 ******* 16/12/2010 movimento
10 2 ******* 10/12/2010 parado

Preciso fazer uma select que me retorne os ultimos de cadacliente com status parado e ligado.

Mas to perdidão.

Obrigado

14 Respostas

Rafael_Mesquita_Mour

Flavio machine:
É o seguinte tenho uma tabela + ou - assim

id idClinte data status
1 6 12/12/2010 parado
2 2 10/12/2010 ligado
3 3 13/12/2010 parado
4 2 10/12/2010 ligado
5 3 14/12/2010 movimento
6 2 10/12/2010 parado
7 5 16/12/2010 parado
8 2 10/12/2010 ligado
9 6 16/12/2010 movimento
10 2 10/12/2010 parado

Preciso fazer uma select que me retorne os ultimos de cadacliente com status parado e ligado.

Mas to perdidão.

Obrigado


Os ultimos o que amigo? Seja mais especifico, se for pra fazer um filtro só com usuários parado e ligado acredito que deva ser algo assim:

Select * from <suaTabela> where status = parado and status = ligado;

Acho que não é só isso não… não pode ser…

;D

CarlosEduardoDantas
select max(data),idcliente
from tabela
where status in ('parado','ligado')
group by idcliente
A

Você conhece os comandos GROUP BY, MAX e sub-queries?

Descubra primeiro quem é a maior data (última) por status.

Depois veja quais ids relacionados com os valores encontrado na primeira parte.

Flavio_machine

Opa, é os ultimos pela data.

Flavio_machine

Ok, mas como vou saber qual é a maior data de cada resgistro sendo que cada registro tem uma data diferente.

Obrigado

Flavio_machine

Poxa Eduardo acho vai dar certo a tabela é gigante to esperendo aqui, so tem uma coisa eu precisava retornar varios campos s sempre que do o group by eu consigo retornar so o campo que coloco no group by.
Vc sabe como faço isso ?
Abraço

Marky.Vasconcelos

SELECT * FROM ORDER BY DESC;

Dai depende do banco que voce está usando para pegar só uma parte do resultado.

No MS-SQL seria

SELECT TOP 200 * FROM ORDER BY DESC;
(200 pela data)

No Oracle já seria diferente.

Flavio_machine

Mas eu so posso pegar o ultimo registro de cada clientId nao posso pegar mais

A

Para estes dados que você deu de exemplo, qual seria o resultado esperado?

Rafael_Mesquita_Mour

select * from TABELA where status in (‘ligado’, ‘parado’) and data = 22/12/2010;

?

os últimos registros do dia?

e se o cara teve mais de um registro no dia, sei la… por exemplo…

ai não vai dar (eu acho) pra pegar um único registro, ele vai trazer os dois… já que vc ta trazendo pela data…

Flavio_machine

Tenho uma tabela que salva posições geografica de varios veiculos entao preciso saber se um veiculo parou de mandar posição ou seja se o equipamento esta com problema então tenho que pegar a ultima posição enviada de cada equipamento e ver a data para saber se ele faz muito tempo que nao manda posição.
Valeu

CarlosEduardoDantas

novamente

CarlosEduardoDantas:
select max(data),idcliente from tabela where status in ('parado','ligado') group by idcliente

Rafael_Mesquita_Mour

Flavio machine:
Tenho uma tabela que salva posições geografica de varios veiculos entao preciso saber se um veiculo parou de mandar posição ou seja se o equipamento esta com problema então tenho que pegar a ultima posição enviada de cada equipamento e ver a data para saber se ele faz muito tempo que nao manda posição.
Valeu

Nessa tabela você armazena o campo ‘HORA’?

;D

Flavio_machine

Vi sim a partir dele que fiz esse select

select max(u.gps_time),u.serial_number
from xxx_universal_state u join xxx_object o on u.serial_number = o.serial_number
where u.dsevent in (‘Parado’,‘Ignicao’) and u.event_time BETWEEN ‘10-19-2010’ AND ‘12-19-2010’
group by u.serial_number;
Estou testando agora pra ver se funciona.
Obrigado

Criado 22 de dezembro de 2010
Ultima resposta 22 de dez. de 2010
Respostas 14
Participantes 5