Jump to content
vbndesign

Retornar último registro de cada grupo verificando o status do grupo

Recommended Posts

Boa noite pessoal. Estou com um problema que não faço ideia de como solucionar.

Tenho uma tabela que trás o histórico de palestras com os seguintes campos.

- id
- id_usuario

- id_status_palestra
- data_palestra

- data_cadastro

 

Sempre que um usuário é cadastrado em uma palestra ele fica com o status de palestra pré-agendada. Porém a data desta palestra pode ser alterada e com isso cria-se um novo registro com a nova data fazendo o histórico.

 

A questão é que eu preciso pegar o último registro de cada usuário e caso ele esteja com o status de palestra pré-agendada (neste exemplo) contar quantos usuários se encontram nesta condição e agrupa-los pela data da palestra. Desta forma eu saberia quais datas eu tenho usuários com a palestra pré-agendada e quantos são.

 

Tentei ler vários posts parecidos mas sem sucesso devido a minha limitação com algumas funções e agrupamento de resultados com SQL.

 

Se alguém puder me ajudar agradeço muito.

Share this post


Link to post
Share on other sites

Fala ai Motta. Até entendi o sql que postou no post que citou mas o meu caso é um pouco diferente e envolve mais coisas.

 

No caso eu alterei os nomes dos atributos para ficar menor no post acima mas a tabela é essa aqui em baixo com alguns registros.

 

tabela1.jpg

 

Dai como pode perceber eu posso ter mais de um registro para cada usuário. Como expliquei acima esta tabela grava qualquer alteração das datas da palestra e status das mesmas sempre em novos registros fazendo com que eu tenha um histórico de ações.

 

O que eu preciso é sempre pegar o último registro de cada usuário de acordo com o seu status e agrupá-los pela data da palestra para saber a quantidade total.

 

Exemplo:

No meu sistema eu preciso retornar quantos usuários estão com o status da palestra igual a 1 e mostrar a quantidade total através da data.

 

Neste caso a minha consulta deveria retornar os codigo_usuarioxpalestra: 2, 5 e 6. Em seguida agrupá-los pela data o que resultaria em 2 usuários na data 2014-03-10 e 1 usuário na data 2014-03-17.

 

Eu até consegui fazer alguma coisa na consulta abaixo, porém eu não consegui fazer com que o codigo_usuarioxpalestra 3 ficasse de fora já que o último registro deste usuário está com o cod_status_palestra igual a 2 e também não consegui agrupá-los pela data fazendo uma contagem do total.

 

 

SELECT uxa1.codigo_usuarioxpalestra, uxa1.cod_usuario, uxa1.cod_status_palestra, (SELECT data_palestra FROM t_usuarioxpalestra AS uxa2 WHERE uxa2.cod_usuario = uxa1.cod_usuario ORDER BY uxa2.codigo_usuarioxpalestra DESC LIMIT 1) AS data
FROM t_usuarioxpalestra AS uxa1
GROUP BY uxa1.cod_usuario ORDER BY uxa1.cod_usuario

 

Abs.

Edited by vbndesign

Share this post


Link to post
Share on other sites

marcosmarcolin tentei aqui e não foi, vou passar como está construido aqui.


$SQL_noticias = mysql_query("SELECT * FROM noticias INNER JOIN categoria ON(noticias.categoria = categoria.id_categoria) WHERE url_categoria = '$arquivo' AND ORDER BY id_noticia DESC");
  while($lh2 = mysql_fetch_array($SQL_noticias)){
  $idNoticia = $lh2['id_noticia'];
  $tituloNoticia = $lh2['titulo'];
  $legendaNoticia = $lh2['legenda'];
  $imagemNoticia = $lh2['imagem'];
  $urlNoticia = $lh2['url'];

Share this post


Link to post
Share on other sites

Pensei em uma forma de fazer, não é a melhor prática.

 

$max_id = mysqli_query($con, "SELECT MAX(ID) FROM noticias"); // Recebe o maior ID da tabela, ex: 98
$max_id = $max_id -1; // tira o último ID ficando 97

// depois executa a consulta
$res = mysqli_query($con, "SELECT * FROM noticias LIMIT '$max_id' ORDER BY ASC"); // inicia do 0 e vai até 97

Só ajustar pro teu JOIN.

Share this post


Link to post
Share on other sites
Em 29/10/2018 at 09:48, andrepinheiroti disse:

Alguém saberia me dizer como faço para retornar todos os registros menos o último? Agradeço desde já a todos!

 

SELECT 
a.id
FROM
bd.tabela AS a
WHERE
a.id NOT IN (SELECT MAX(id) AS id FROM bd.tabela)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.