alvorac 0 Denunciar post Postado Janeiro 27, 2015 Pessoal preciso obter os ultimos eventos de acordo com a categoria associada conforme explicado abaixo: Tabela agenda (campos) age_id (pk) |sub_id (fk) Tabela Subcategoria sub_id (pk) |sigla Dados Tabela Agenda age_id | sub_id 1 1 2 1 3 2 4 2 5 3 Tabela Subcategoria sub_id (PK) sigla 1 | MT 2| ST 3| NT preciso do ultimo evento de cada categoria na mesma sql o resultado da consulta seria Tabela Resultado age_id, sub_id | sigla 2 | 1 MT 4 | 2 ST 5 | 3 NT ja tentei utilizando subsql, mas volta a ultima de uma unica categoria, preciso da ultima de cada uma das categorias,alguem me ajuda? Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Janeiro 28, 2015 Não ficou bem claro, sempre é bom colocar a SQL que você utilizou para entendermos melhor onde está a dúvida. Acredito que agrupando os resultados e utilizando o MAX(), deve resolver a questão. Compartilhar este post Link para o post Compartilhar em outros sites
alvorac 0 Denunciar post Postado Janeiro 28, 2015 seguem scripts? tabelas CREATE TABLE `agenda` ( `age_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, `age_tipo` tinyint(10) unsigned DEFAULT NULL, `age_titulo` varchar(50) DEFAULT NULL, `age_data` date DEFAULT NULL, `age_horario` time DEFAULT NULL, `age_local` varchar(50) DEFAULT NULL, `age_confirma_pres` varchar(50) DEFAULT NULL, `age_avisa_email` varchar(50) DEFAULT NULL, `age_descricao` varchar(50) DEFAULT NULL, `age_ano` int(11) unsigned DEFAULT '0', `sub_id` int(11) unsigned DEFAULT NULL, PRIMARY KEY (`age_id`) ) CREATE TABLE `subcolegiado` ( `sub_id` tinyint(10) unsigned NOT NULL AUTO_INCREMENT, `sub_nome` varchar(50) NOT NULL DEFAULT '', `sub_sigla` varchar(10) NOT NULL DEFAULT '', `sub_total_titular` int(11) DEFAULT NULL, `sub_total_suplente` int(10) unsigned DEFAULT NULL, `sub_modo` varchar(50) DEFAULT NULL, PRIMARY KEY (`sub_id`) ) eu consigo trazer o ultimo evento apenas se informar um unico subcolegiado, pela seguinte sql select (a.age_id) as id, s.sub_sigla as classe, a.age_titulo as titulo, a.age_data as data from agenda a, subcolegiado s where age_id = (select max(age_id) from agenda where sub_id = 1)and a.sub_id = s.sub_id group by id, classe, titulo, data NESSE CASO ELE SO RETORNA UM REGISTRO REFERENTE SUB_ID = 1 NO CASO O ULTIMO EVENTO CADASTRADO [E O 2. POREM QUE PRECISO DO ULTIMO DE CADA UM DOS SUBCOLEGIADOS, ESSA CLAUSULA N CONSIGO FECHAR PARA RETORNAR CONFORME ABAIXO Tabela Resultado age_id, sub_id | sigla 2 | 1 MT 4 | 2 ST 5 | 3 NT o problema esta justamente ai, a sql deve retornar a ultima reuniao de cada subcolegiado conforme descrevi nos resultados de exemplo, mas nao consigo trazer todos, talvez esteja fazendo algo errado Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Janeiro 28, 2015 Identando o código ficaria assim: SELECT a.age_id as id, s.sub_sigla as classe, a.age_titulo as titulo, a.age_data as data FROM agenda a, subcolegiado s WHERE age_id = ( SELECT MAX(age_id) FROM agenda WHERE sub_id = 1 ) AND a.sub_id = s.sub_id GROUP BY id, classe, titulo, data E se fizéssemos um código muito parecido: SELECT a.age_id as id, s.sub_sigla as classe, a.age_titulo as titulo, a.age_data as data FROM agenda a, subcolegiado s WHERE age_id = ( SELECT MAX(age_id) FROM agenda WHERE sub_id = a.sub_id # Substituí o "sub_id = 1" ) AND a.sub_id = s.sub_id GROUP BY id, classe, titulo, data Acho ainda, que você consegue melhorar este código, fazer tudo direto, ou seja, sem sub-query. Compartilhar este post Link para o post Compartilhar em outros sites
alvorac 0 Denunciar post Postado Janeiro 29, 2015 puxa, de fato, tava de cabe;a quente ja que nem conseguia mais visualizar uma solu;'ao, vlw cara. Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Janeiro 30, 2015 Posta a solução e marca como resolvido para não deixar o tópico no vácuo, kkk. Compartilhar este post Link para o post Compartilhar em outros sites