nknk 3 Denunciar post Postado Setembro 27, 2007 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
hinom 5 Denunciar post Postado Setembro 27, 2007 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
nknk 3 Denunciar post Postado Setembro 27, 2007 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ó issoSELECT 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 ASCestruturaCREATE 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))dadosINSERT 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
hinom 5 Denunciar post Postado Setembro 28, 2007 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
nknk 3 Denunciar post Postado Setembro 28, 2007 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
hinom 5 Denunciar post Postado Setembro 28, 2007 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
nknk 3 Denunciar post Postado Setembro 28, 2007 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
hinom 5 Denunciar post Postado Setembro 29, 2007 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