littlejuh 1 Denunciar post Postado Fevereiro 6, 2013 HEY, alguém muito manjador que puder me ajudar. Tenho a seguinte estrutura: CREATE TABLE IF NOT EXISTS `cv2_status` ( `cod_status` int(11) NOT NULL AUTO_INCREMENT, `descricao` varchar(55) NOT NULL, PRIMARY KEY (`cod_status`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; CREATE TABLE IF NOT EXISTS `cv2_veiculos_marcas` ( `cod_marca` int(10) NOT NULL AUTO_INCREMENT, `descricao` varchar(150) CHARACTER SET latin1 NOT NULL DEFAULT '', `tipo` varchar(50) CHARACTER SET latin1 NOT NULL DEFAULT '', `logomarca` varchar(100) CHARACTER SET latin1 DEFAULT NULL, `chave_tipo_veiculo` int(10) NOT NULL, `cv2_veiculos_tipos_cod_tipo_veiculo` int(10) NOT NULL, PRIMARY KEY (`cod_marca`), KEY `fk_cv2_veiculos_marcas_cv2_veiculos_tipos1_idx` (`cv2_veiculos_tipos_cod_tipo_veiculo`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=176 ; CREATE TABLE IF NOT EXISTS `cv2_veiculos_movimentacoes` ( `cod_movimentacao` int(10) NOT NULL, `data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `tipo` int(11) NOT NULL, `chave_veiculo` int(11) NOT NULL, PRIMARY KEY (`cod_movimentacao`), KEY `fk_cv2_veiculos_movimentacoes_cv2_status_idx` (`tipo`), KEY `fk_cv2_veiculos_movimentacoes_cv2_veiculos_idx` (`chave_veiculo`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `cv2_veiculos_tipos` ( `cod_tipo_veiculo` int(10) NOT NULL AUTO_INCREMENT, `descricao` varchar(150) NOT NULL DEFAULT '', `descricao_plural` varchar(50) NOT NULL DEFAULT '', `codigo` varchar(150) NOT NULL DEFAULT '', `codigo_plural` varchar(50) NOT NULL DEFAULT '', `tabela` varchar(50) NOT NULL, `ativo` bit(1) NOT NULL, PRIMARY KEY (`cod_tipo_veiculo`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ; CREATE TABLE IF NOT EXISTS `cv2_veiculos_veiculos` ( `cod_veiculo` int(10) NOT NULL AUTO_INCREMENT, `descricao` varchar(150) DEFAULT NULL, `visualizacoes` int(11) DEFAULT NULL, `foto_1` varchar(50) DEFAULT NULL, `foto_2` varchar(50) DEFAULT NULL, `foto_3` varchar(50) DEFAULT NULL, `foto_4` varchar(50) DEFAULT NULL, `foto_5` varchar(50) DEFAULT NULL, `foto_6` varchar(50) DEFAULT NULL, `valor` decimal(20,2) DEFAULT NULL, `valor_promocional` decimal(20,2) DEFAULT NULL, `itens` text, `observacoes` text, `data_cadastro` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `ano` int(11) DEFAULT NULL, `unico_dono` bit(1) DEFAULT NULL, `novo` bit(1) DEFAULT NULL, `chave_vendedor` int(11) NOT NULL, `chave_marca` int(10) NOT NULL, `chave_tipo_veiculo` int(10) NOT NULL, `chave_localizacao` int(10) NOT NULL, `status` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`cod_veiculo`), KEY `fk_cv2_veiculos_veiculos_cv2_vendedores1_idx` (`chave_vendedor`), KEY `fk_cv2_veiculos_veiculos_cv2_veiculos_marcas1_idx` (`chave_marca`), KEY `fk_cv2_veiculos_veiculos_cv2_veiculos_tipos1_idx` (`chave_tipo_veiculo`), KEY `fk_cv2_veiculos_veiculos_cv2_localizacoes1_idx` (`chave_localizacao`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=20 ; Estou fazendo uma query que seja mais ou menos isso: SELECT `cv2_veiculos_veiculos`.cod_veiculo, `cv2_veiculos_veiculos`.descricao, `cv2_veiculos_veiculos`.valor, `cv2_veiculos_veiculos`.valor_promocional, `cv2_veiculos_veiculos`.data_cadastro, `cv2_veiculos_veiculos`.status, `cv2_veiculos_movimentacoes`.cod_movimentacao, `cv2_veiculos_movimentacoes`.data AS `data_movimentacao`, `cv2_veiculos_tipos`.`descricao` AS `tipo`, `cv2_veiculos_marcas`.`descricao` AS `marca` FROM `cv2_veiculos_veiculos` INNER JOIN `cv2_veiculos_tipos` ON `cv2_veiculos_veiculos`.`chave_tipo_veiculo` = `cv2_veiculos_tipos`.`cod_tipo_veiculo` INNER JOIN `cv2_veiculos_marcas` ON `cv2_veiculos_veiculos`.`chave_marca` = `cv2_veiculos_marcas`.`cod_marca` INNER JOIN `cv2_veiculos_movimentacoes` ON `cv2_veiculos_movimentacoes`.`chave_veiculo` = `cv2_veiculos_veiculos`.`cod_veiculo` WHERE cv2_veiculos_tipos.`descricao` like '%carro%' AND cv2_veiculos_veiculos.`status` = 0 ; Porém quero agrupar todos os resultados que contenham o mesmo cod_veiculo e ordenar a data_movimentacao para pegar somente a mais recente. Alguem pode me ajudar ? =) Compartilhar este post Link para o post Compartilhar em outros sites
Rodolfo TI 6 Denunciar post Postado Fevereiro 6, 2013 não testei sua query mas já testou algo simples como group by cod_veiculo e order by data_movimentacao não vi isso na query por isso me surgiu a curiosidade se teria testado. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Fevereiro 6, 2013 Veja se ajuda Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Fevereiro 6, 2013 para pegar somente a mais recente. por isto o Max neste exemplo ... SELECT a.Id, IdCategoriaIdeia, IdUsuario, Titulo, Descricao, IdeiaUsada, a.DataInclusao FROM Ideia a where a.DataInclusao = (SELECT MAX(b.DataInclusao) FROM Ideia b WHERE b.Id = a.ID AND b.IdUsuario = a.IdUsuario) pega a "ideia" mais recente ... a questão é adaptar a sua query,. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Fevereiro 7, 2013 SELECT `cv2_veiculos_veiculos`.id AS `id_veiculo`, `cv2_veiculos_veiculos`.descricao, `cv2_veiculos_veiculos`.valor, `cv2_veiculos_veiculos`.valor_promocional, `cv2_veiculos_veiculos`.data_cadastro, `cv2_veiculos_veiculos`.status, `cv2_veiculos_movimentacoes`.id AS `id_movimentacao`, `cv2_veiculos_movimentacoes`.data AS `data_movimentacao`, `cv2_veiculos_tipos`.`descricao` AS `tipo`, `cv2_veiculos_marcas`.`descricao` AS `marca`FROM `cv2_veiculos_veiculos` INNER JOIN `cv2_veiculos_tipos` ON `cv2_veiculos_veiculos`.`id_tipo` = `cv2_veiculos_tipos`.`id` INNER JOIN `cv2_veiculos_marcas` ON `cv2_veiculos_veiculos`.`id_marca` = `cv2_veiculos_marcas`.`id` INNER JOIN `cv2_veiculos_movimentacoes` ON `cv2_veiculos_movimentacoes`.`id` = `cv2_veiculos_veiculos`.`id`WHERE cv2_veiculos_tipos.`descricao` like '%carro%'AND cv2_veiculos_veiculos.`status` = 0AND cv2_veiculos_movimentacoes.data = (SELECT MAX(cv2_veiculos_movimentacoes.data) FROM cv2_veiculos_movimentacoes cv2_veiculos_movimentacoes2 WHERE cv2_veiculos_veiculos2.id = cv2_veiculos_movimentacoes.id)---------------------------------------------------------------------------------------------Um "as" talvez , ou o tamanho do aliasAND cv2_veiculos_movimentacoes.data = (SELECT MAX(cv2_veiculos_movimentacoes2.data) FROM cv2_veiculos_movimentacoes as cv2_veiculos_movimentacoes2 WHERE cv2_veiculos_veiculos2.id = cv2_veiculos_movimentacoes.id) --------- AND cv2_veiculos_movimentacoes.data = (SELECT MAX(cv2m2.data) FROM cv2_veiculos_movimentacoes as cv2m2 WHERE cv2m2.id = cv2_veiculos_movimentacoes.id) Compartilhar este post Link para o post Compartilhar em outros sites
littlejuh 1 Denunciar post Postado Fevereiro 7, 2013 Assim, ele até agrupa os do mesmo id, porém, não retorna o mais recente: SELECT `cv2_veiculos_veiculos`.id AS `id_veiculo`, `cv2_veiculos_veiculos`.descricao, `cv2_veiculos_veiculos`.valor, `cv2_veiculos_veiculos`.valor_promocional, `cv2_veiculos_veiculos`.data_cadastro, `cv2_veiculos_veiculos`.status, `cv2_veiculos_movimentacoes`.id AS `id_movimentacao`, `cv2_veiculos_movimentacoes`.data AS `data_movimentacao`, `cv2_veiculos_tipos`.`descricao` AS `tipo`, `cv2_veiculos_marcas`.`descricao` AS `marca` FROM `cv2_veiculos_veiculos` INNER JOIN `cv2_veiculos_tipos` ON `cv2_veiculos_veiculos`.`id_tipo` = `cv2_veiculos_tipos`.`id` INNER JOIN `cv2_veiculos_marcas` ON `cv2_veiculos_veiculos`.`id_marca` = `cv2_veiculos_marcas`.`id` INNER JOIN `cv2_veiculos_movimentacoes` ON `cv2_veiculos_movimentacoes`.`id` = `cv2_veiculos_veiculos`.`id` WHERE cv2_veiculos_tipos.`descricao` like '%carro%' AND cv2_veiculos_veiculos.`status` = 0 AND cv2_veiculos_movimentacoes.data = (SELECT MAX(cv2m2.data) FROM cv2_veiculos_movimentacoes as cv2m2 WHERE cv2m2.id = cv2_veiculos_movimentacoes.id) Resultado: id descricao valor valor_promocional data_cadastro status id_movimentacao data_movimentacao tipo marca 1 Fusca 4000.00 4500.00 2013-02-06 16:17:13 0 1 2013-02-06 16:27:44 Carro Honda3 Palio 8293892639.00 2013-02-07 10:53:00 0 3 2013-02-07 10:21:19 Carro Honda E olha os registros da tabela movimentacoes, o veiculo de id = 1, tem movimentações mais recentes do que aquela que apareceu no resultado acima. id data id_tipo id_veiculo 1 2013-02-06 16:27:44 1 12 2013-02-06 17:24:08 1 23 2013-02-07 10:21:19 2 14 2013-02-07 10:21:19 2 15 2013-02-07 10:21:44 2 1 Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Fevereiro 7, 2013 então deve ser pelo id_veiculo ... AND cv2_veiculos_movimentacoes.data = (SELECT MAX(cv2m2.data) FROM cv2_veiculos_movimentacoes as cv2m2 WHERE cv2m2.id_veiculo = cv2_veiculos_movimentacoes.id_veiculo) Compartilhar este post Link para o post Compartilhar em outros sites
littlejuh 1 Denunciar post Postado Fevereiro 7, 2013 Daí nada retorna. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Fevereiro 7, 2013 Como cv2_veiculos_movimentacoes se relaciona com cv2_veiculos_veiculos ?! ao ínves de : INNER JOIN `cv2_veiculos_movimentacoes` ON `cv2_veiculos_movimentacoes`.`id` = `cv2_veiculos_veiculos`.`id` não seria INNER JOIN `cv2_veiculos_movimentacoes` ON `cv2_veiculos_movimentacoes`.`id_veiculo` = `cv2_veiculos_veiculos`.`id` ? Compartilhar este post Link para o post Compartilhar em outros sites
littlejuh 1 Denunciar post Postado Fevereiro 8, 2013 Certo, porém, ele retorna a 1º movimentação de cada veículo, e não a mais recente ordenada pela data. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Fevereiro 8, 2013 Como cv2_veiculos_movimentacoes se relaciona com cv2_veiculos_veiculos ?! Compartilhar este post Link para o post Compartilhar em outros sites
littlejuh 1 Denunciar post Postado Fevereiro 8, 2013 CREATE TABLE IF NOT EXISTS `cv2_veiculos_movimentacoes` ( `id` int(11) NOT NULL, `data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `tipo` int(11) NOT NULL, `id_veiculo` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `fk_cv2_veiculos_movimentacoes_cv2_status_idx` (`tipo`), KEY `fk_cv2_veiculos_movimentacoes_cv2_veiculos_idx` (`id_veiculo`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; o id_veiculo na tabela veiculos_movimentacoes é relacionado ao id da tabela veiculos_veiculos, relação de 1:n Já consegui! :) Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Fevereiro 8, 2013 então ... SELECT `cv2_veiculos_veiculos`.id AS `id_veiculo`, `cv2_veiculos_veiculos`.descricao, `cv2_veiculos_veiculos`.valor, `cv2_veiculos_veiculos`.valor_promocional, `cv2_veiculos_veiculos`.data_cadastro, `cv2_veiculos_veiculos`.status, `cv2_veiculos_movimentacoes`.id AS `id_movimentacao`, `cv2_veiculos_movimentacoes`.data AS `data_movimentacao`, `cv2_veiculos_tipos`.`descricao` AS `tipo`, `cv2_veiculos_marcas`.`descricao` AS `marca` FROM `cv2_veiculos_veiculos` INNER JOIN `cv2_veiculos_tipos` ON `cv2_veiculos_veiculos`.`id_tipo` = `cv2_veiculos_tipos`.`id` INNER JOIN `cv2_veiculos_marcas` ON `cv2_veiculos_veiculos`.`id_marca` = `cv2_veiculos_marcas`.`id` INNER JOIN `cv2_veiculos_movimentacoes` ON `cv2_veiculos_movimentacoes`.`id_veiculo` = `cv2_veiculos_veiculos`.`id` WHERE cv2_veiculos_tipos.`descricao` like '%carro%' AND cv2_veiculos_veiculos.`status` = 0 AND cv2_veiculos_movimentacoes.data = (SELECT MAX(cv2m2.data) FROM cv2_veiculos_movimentacoes as cv2m2 WHERE cv2m2.id_veiculo = cv2_veiculos_movimentacoes.id_veiculo) Compartilhar este post Link para o post Compartilhar em outros sites
littlejuh 1 Denunciar post Postado Fevereiro 8, 2013 Siim, alterei algumas coisas a mais mas assim funcionou também, eu tava pondo errado um negócio :( ! Obrigada Motta =) Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Fevereiro 8, 2013 beleza, carnaval tranquilo !! Compartilhar este post Link para o post Compartilhar em outros sites