Ir para conteúdo

POWERED BY:

Arquivado

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

nknk

[Resolvido] Consulta agrupando data e pegando a última hora

Recommended Posts

Estou tentando fazer um select mais complexo mas não sei como fazer direito

Eu tenho um campo data e hora. Eu quero agrupar as datas e pegar a última hora dessa data.

 

CAMPO

DATA Y-m-d

HORA H:i:s

 

por ex.:

 

TABELA

id data hora1 2007-08-01 01:00:002 2007-08-01 02:00:003 2007-08-01 03:00:004 2007-08-01 04:00:005 2007-08-02 11:00:006 2007-08-02 12:00:00

Eu quero que esta consulta retorne

 

CONSULTA - RESULTADO

id data hora4 2007-08-01 04:00:006 2007-08-02 12:00:00

Existe alguma expressão que pode ser usada no select para emitir um valor máximo, ex.:

$sql = "SELECT * FROM tabela GROUP by data WHERE id MAX";

Compartilhar este post


Link para o post
Compartilhar em outros sites

query

select concat(date, concat(' ',hour)) as dat from testeorder by dat ASC

 

estrutura

CREATE TABLE teste (  id int(2) NOT NULL auto_increment,  date date NOT NULL default '2007-08-27',  hour time NOT NULL default '00:00:00',  PRIMARY KEY  (id),  UNIQUE KEY id (id),  KEY id_2 (id))

 

dados

INSERT INTO teste VALUES("1", "2007-08-27", "01:00:00");INSERT INTO teste VALUES("2", "2007-08-27", "02:00:00");INSERT INTO teste VALUES("3", "2007-08-27", "03:00:00");INSERT INTO teste VALUES("4", "2007-08-27", "04:00:00");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara não funcionou. Explicando: Eu queria agrupar as datas cuja a hora seja maior, por exemplo: se eu fiz um 4 registro hoje, ele vai pegar o último registro de hoje, a última hora. Os registros de ontem, ele pega o último e exibe a consulta.EU pensei desse jeito só que max não funciona e parece que a logica esta errada

SELECT max(id), data, hora FROM tabela GROUP by data;
Se eu fizesse só isso
SELECT id, data, hora FROM tabela GROUP by data;
Ele retorna as datas agrupadas mas com o primeiro registro

query

select concat(date, concat(' ',hour)) as dat from testeorder by dat ASC
estrutura
CREATE TABLE teste (  id int(2) NOT NULL auto_increment,  date date NOT NULL default '2007-08-27',  hour time NOT NULL default '00:00:00',  PRIMARY KEY  (id),  UNIQUE KEY id (id),  KEY id_2 (id))
dados
INSERT INTO teste VALUES("1", "2007-08-27", "01:00:00");INSERT INTO teste VALUES("2", "2007-08-27", "02:00:00");INSERT INTO teste VALUES("3", "2007-08-27", "03:00:00");INSERT INTO teste VALUES("4", "2007-08-27", "04:00:00");

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao entendi o que você quer fazer.pensei que você estivesse com dificuldade em unir data e hora e exibi-los numa ordem crescente ou descrescente.explique melhor porque continuo nao entendendo.obs: leio os topicos de forma rapida, por isso precisa estar bem explicado. se necessário, faça um desenho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está é a tabela com os campos id, data, hora. O campo id é autoincrement, data (date 0000-00-00), hora (time 00:00:00)

 

id | data | hora |

1 | 2007-08-11 | 01:00:00 |

2 | 2007-08-11 | 02:00:00 |

3 | 2007-08-11 | 03:00:00 |

4 | 2007-08-11 | 04:00:00 |

5 | 2007-08-12 | 11:00:00 |

6 | 2007-08-12 | 13:00:00 |

7 | 2007-08-13 | 14:00:00 |

8 | 2007-08-14 | 10:00:00 |

9 | 2007-08-15 | 18:00:00 |

10 | 2007-08-15 | 12:00:00 |

11 | 2007-08-15 | 22:00:00 |

Se eu fizer essa consulta ela retorna:

SELECT id, data, hora FROM tabela GROUP by data;

id | data | hora |*

1 | 2007-08-11 | 01:00:00 | <- primeira hora cadastrada nesse dia

2 | 2007-08-11 | 02:00:00 |

3 | 2007-08-11 | 03:00:00 |

4 | 2007-08-11 | 04:00:00 |

5 | 2007-08-12 | 11:00:00 |

6 | 2007-08-12 | 13:00:00 |

7 | 2007-08-13 | 14:00:00 |

8 | 2007-08-14 | 10:00:00 |

9 | 2007-08-15 | 18:00:00 |

10 | 2007-08-15 | 12:00:00 |

11 | 2007-08-15 | 22:00:00 |

* Resultado da consulta, considerar só o que está em negrito como parte do resultado.

 

Ou seja ele pega o primeiro campo (hora, id) da data a ser agrupada.

Só que eu preciso pegar a última hora de um mesmo dia. Ou seja, o resultado seria esse:

 

id | data | hora |*

1 | 2007-08-11 | 01:00:00 |

2 | 2007-08-11 | 02:00:00 |

3 | 2007-08-11 | 03:00:00 |

4 | 2007-08-11 | 04:00:00 | <- última hora cadastrada nesse dia

5 | 2007-08-12 | 11:00:00 |

6 | 2007-08-12 | 13:00:00 |

7 | 2007-08-13 | 14:00:00 |

8 | 2007-08-14 | 10:00:00 |

9 | 2007-08-15 | 18:00:00 |

10 | 2007-08-15 | 12:00:00 |

11 | 2007-08-15 | 22:00:00 |

* Resultado da consulta, considerar só o que está em negrito como parte do resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu. agora entendivou fazer um teste aqui.acho que funcionará se colocar em ordem decrescente + distinct pro campo "data"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pessoal, funcionou a solução do adailton!Entendi que é possível ordenar um coluna asc e outra desc, era isso que precisava.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pow e eu quebrando a cabeça...se fizer no php fica fácilpensei que você queria fazer tudo em SQLtentei fazer uns testes aqui mas ainda nao consegui nao..

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.