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