Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
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
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.
puxa, de fato, tava de cabe;a quente ja que nem conseguia mais visualizar uma solu;'ao, vlw cara.
Posta a solução e marca como resolvido para não deixar o tópico no vácuo, kkk.
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.