Ir para conteúdo

Arquivado

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

alvorac

Ultimos eventos por categoria

Recommended Posts

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.