Select horas

Galera tenho o seguinte select:

SELECT gm.Idaut AS IDIDA, DATE_FORMAT(gm.Data,'%d/%m/%Y') as DATAI, DATE_FORMAT(gm.HoraSaida,'%H:%i') as SAIDAI, DATE_FORMAT(gm.HoraChegada,'%H:%i') as CHEGADAI, (SELECT DATE_FORMAT(gm1.HoraSaida,'%H:%i') AS SAI_ANTES FROM guiasmov gm1 where DATE_FORMAT(gm1.HoraSaida,'%H:%i') < DATE_FORMAT(gm.HoraSaida,'%H:%i') AND gm1.Data = '2009-09-01' AND gm1.Idlinha = 13 AND gm1.Idcarro >= 1 AND gm1.Idcarro <= 200 AND gm1.Sentido = 0 ORDER BY SAI_ANTES DESC LIMIT 0,1) AS SAI1, (SELECT DATE_FORMAT(gm2.HoraChegada,'%H:%i') AS CHEGA_ANTES FROM guiasmov gm2 where DATE_FORMAT(gm2.HoraSaida,'%H:%i') < DATE_FORMAT(gm.HoraSaida,'%H:%i') AND gm2.Data = '2009-09-01' AND gm2.Idlinha = 13 AND gm2.Idcarro >= 1 AND gm2.Idcarro <= 200 AND gm2.Sentido = 0 ORDER BY gm2.HoraSaida DESC LIMIT 1) AS CHEGA1 FROM guiasmov gm WHERE gm.Data = '2009-09-01' AND gm.Idlinha = 13 AND gm.Sentido = 0 AND gm.Idcarro >= 1 AND gm.Idcarro <= 200 ORDER BY SAIDAI ASC

Tá funcionando bem até certo momento:

“IDIDA”; “DATAI”; “SAIDAI”; “CHEGADAI”; “SAI1”; “CHEGA1”
199191; “01/09/2009”; “00:27”; “01:26”; NULL; NULL
200206; “01/09/2009”; “00:31”; “01:45”; “00:27”; “01:26”
198276; “01/09/2009”; “00:33”; “01:25”; “00:31”; “01:45”
198867; “01/09/2009”; “01:16”; “02:19”; “00:33”; “01:25”
197521; “01/09/2009”; “02:00”; “03:06”; “01:16”; “02:19”
199193; “01/09/2009”; “02:24”; “03:34”; “02:00”; “03:06”
200208; “01/09/2009”; “02:39”; “03:51”; “02:24”; “03:34”
198495; “01/09/2009”; “03:58”; “10:03”; “02:39”; “03:51” <------
199218; “01/09/2009”; “04:00”; “05:02”; “03:58”; “03:51”
198731; “01/09/2009”; “04:08”; “05:08”; “04:00”; “03:51”
199227; “01/09/2009”; “04:13”; “11:54”; “04:08”; “03:51”
198151; “01/09/2009”; “04:16”; “05:16”; “04:13”; “03:51”

O estranho é que a partir do oitavo registro ele começa a repetir o horário de chegada…
Onde posso está errando.

Valeu

SELECT DATE_FORMAT(gm2.HoraChegada,'%H:%i') AS CHEGA_ANTES FROM guiasmov gm2 where DATE_FORMAT(gm2.HoraSaida,'%H:%i') < DATE_FORMAT(gm.HoraSaida,'%H:%i') AND gm2.Data = '2009-09-01' AND gm2.Idlinha = 13 AND gm2.Idcarro >= 1 AND gm2.Idcarro <= 200 AND gm2.Sentido = 0 ORDER BY gm2.HoraSaida DESC LIMIT 1

executa ele no sqlbuilder e ve o resultado que ele traz(Referente ao registro 199218):

SELECT DATE_FORMAT(gm2.HoraChegada,'%H:%i') AS CHEGA_ANTES FROM guiasmov gm2 where DATE_FORMAT(gm2.HoraSaida,'%H:%i') < '04:00' AND gm2.Data = '2009-09-01' AND gm2.Idlinha = 13 AND gm2.Idcarro >= 1 AND gm2.Idcarro <= 200 AND gm2.Sentido = 0 ORDER BY gm2.HoraSaida DESC

A unica diferenca do segundo subselect para o primeiro subselect é a ordenacao e o limit …

talvez voce esteja pegando o registro errado …

Diogo,

Só não entendi o porque nos primeiros registros funciona e depois repete a mesma hora.

depende do que o seu subselect esta retornando … nao eh q esteja se repetindo …
voce tem q ver o que o segundo subselect esta retornando …

Rodo só o segundo no sqlbuilder, para ver o que está acontecendo ou a query inteira

Roda esse comando ai no sqlbuilder:

SELECT DATE_FORMAT(gm2.HoraChegada,’%H:%i’) AS CHEGA_ANTES FROM guiasmov gm2 where DATE_FORMAT(gm2.HoraSaida,’%H:%i’) < ‘04:00’ AND gm2.Data = ‘2009-09-01’ AND gm2.Idlinha = 13 AND gm2.Idcarro >= 1 AND gm2.Idcarro <= 200 AND gm2.Sentido = 0 ORDER BY gm2.HoraSaida DESC

Diogo,

Retornou o seguinte:

CHEGA_ANTES
03:51 
03:34 
03:06 
02:19 
01:25 
01:45 
01:26 
10:03 

Se voce olhar no seu resultset:

“IDIDA”; “DATAI”; “SAIDAI”; “CHEGADAI”; “SAI1”; “CHEGA1”
199191; “01/09/2009”; “00:27”; “01:26”; NULL; NULL
200206; “01/09/2009”; “00:31”; “01:45”; “00:27”; “01:26”
198276; “01/09/2009”; “00:33”; “01:25”; “00:31”; “01:45”
198867; “01/09/2009”; “01:16”; “02:19”; “00:33”; “01:25”
197521; “01/09/2009”; “02:00”; “03:06”; “01:16”; “02:19”
199193; “01/09/2009”; “02:24”; “03:34”; “02:00”; “03:06”
200208; “01/09/2009”; “02:39”; “03:51”; “02:24”; “03:34”
198495; “01/09/2009”; “03:58”; “10:03”; “02:39”; “03:51”
199218; “01/09/2009”; “04:00”; “05:02”; “03:58”; “03:51” <------ esse aqui
198731; “01/09/2009”; “04:08”; “05:08”; “04:00”; “03:51”
199227; “01/09/2009”; “04:13”; “11:54”; “04:08”; “03:51”
198151; “01/09/2009”; “04:16”; “05:16”; “04:13”; “03:51”

No select que te mandei, ve a hora … te mandei a de 4:00 … eh isso que to te dizendo … o teu SQL esta retornando o registro errado … entendeu o que to falando?
O teu proprio sql ta trazendo o recordset errado:
CHEGA_ANTES
03:51 < ---- limit 1 eh esse registro
03:34
03:06
02:19
01:25
01:45
01:26
10:03

Entendi vou dar uma olhada na query e te falo…

Diogo,

Resolvi o problema tirando a formatação da data:

SELECT
gm.Idaut AS IDIDA,
DATE_FORMAT(gm.Data,'%d/%m/%Y') as DATAI,
gm.HoraSaida as SAIDAI,
(SELECT gm1.HoraSaida AS SAI_ANTES FROM guiasmov gm1 where gm1.HoraSaida < gm.HoraSaida AND gm1.Data = '2009-09-01' AND gm1.Idlinha = 13 AND gm1.Sentido = 0 ORDER BY SAI_ANTES DESC LIMIT 0,1) AS SAI1,
gm.HoraChegada as CHEGADAI, 
(SELECT gm2.HoraChegada AS CHEGA_ANTES FROM guiasmov gm2 where gm2.HoraSaida < gm.HoraSaida AND gm2.Data = '2009-09-01' AND gm2.Idlinha = 13 AND gm2.Sentido = 0 ORDER BY gm2.HoraSaida DESC LIMIT 0,1) AS CHEGA1
FROM guiasmov gm 
WHERE
gm.Data = '2009-09-01' AND
gm.Idlinha = 13
AND gm.Sentido = 0
ORDER BY 
SAIDAI ASC

Resultado:

198495	01/09/09	01/09/09 03:58	NULL	01/09/09 10:03	NULL
199218	01/09/09	01/09/09 04:00	01/09/09 03:58	01/09/09 05:02	01/09/09 10:03
198731	01/09/09	01/09/09 04:08	01/09/09 04:00	01/09/09 05:08	01/09/09 05:02
199227	01/09/09	01/09/09 04:13	01/09/09 04:08	01/09/09 11:54	01/09/09 05:08
198151	01/09/09	01/09/09 04:16	01/09/09 04:13	01/09/09 05:16	01/09/09 11:54
198846	01/09/09	01/09/09 04:18	01/09/09 04:16	01/09/09 05:19	01/09/09 05:16
198620	01/09/09	01/09/09 04:30	01/09/09 04:18	01/09/09 05:29	01/09/09 05:19
198581	01/09/09	01/09/09 04:32	01/09/09 04:30	01/09/09 05:32	01/09/09 05:29
198289	01/09/09	01/09/09 04:42	01/09/09 04:32	01/09/09 05:35	01/09/09 05:32
198083	01/09/09	01/09/09 04:48	01/09/09 04:42	01/09/09 05:41	01/09/09 05:35
198014	01/09/09	01/09/09 04:50	01/09/09 04:48	01/09/09 05:37	01/09/09 05:41
199306	01/09/09	01/09/09 04:53	01/09/09 04:50	01/09/09 13:31	01/09/09 05:37
198252	01/09/09	01/09/09 05:00	01/09/09 04:53	01/09/09 06:02	01/09/09 13:31
197810	01/09/09	01/09/09 05:01	01/09/09 05:00	01/09/09 10:38	01/09/09 06:02
197495	01/09/09	01/09/09 05:08	01/09/09 05:01	01/09/09 07:16	01/09/09 10:38
197858	01/09/09	01/09/09 05:17	01/09/09 05:08	01/09/09 14:04	01/09/09 07:16
198705	01/09/09	01/09/09 05:21	01/09/09 05:17	01/09/09 06:16	01/09/09 14:04
198198	01/09/09	01/09/09 05:24	01/09/09 05:21	01/09/09 06:18	01/09/09 06:16
198245	01/09/09	01/09/09 05:27	01/09/09 05:24	01/09/09 07:54	01/09/09 06:18
198259	01/09/09	01/09/09 05:28	01/09/09 05:27	01/09/09 06:32	01/09/09 07:54
197568	01/09/09	01/09/09 05:37	01/09/09 05:28	01/09/09 06:35	01/09/09 06:32
198485	01/09/09	01/09/09 05:41	01/09/09 05:37	01/09/09 06:32	01/09/09 06:35
197488	01/09/09	01/09/09 05:46	01/09/09 05:41	01/09/09 06:45	01/09/09 06:32
197877	01/09/09	01/09/09 05:47	01/09/09 05:46	01/09/09 06:44	01/09/09 06:45
197805	01/09/09	01/09/09 05:49	01/09/09 05:47	01/09/09 14:17	01/09/09 06:44
198301	01/09/09	01/09/09 05:55	01/09/09 05:49	01/09/09 06:55	01/09/09 14:17