ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Qual a sintax correta do DISTINCT no MYSQL 8?

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
andvagner
Novato
Novato


Registrado: Domingo, 14 de Junho de 2020
Mensagens: 13

MensagemEnviada: Ter Jun 23, 2020 1:20 am    Assunto: Qual a sintax correta do DISTINCT no MYSQL 8? Responder com Citação

Boa noite amigos!

Estou tentando fazer um filtro em uma tabela com o DISTINCT, Porém o select só funciona quando seleciono uma coluna. Dese já agradeço pela colaboração.

Segue o código abaixo:


select DISTINCT Leito_Pac,Nome_Pac,Data_Pac,Hora_Pac from Tab_Pacientes group by Leito_Pac,Nome_Pac,Data_Pac,Hora_Pac order by Leito_Pac Desc, Data_Pac Asc, Hora_Pac Asc;

OBS: Quando coloco mais de uma coluna, os valores da coluna leito_pac voltam a se repetir!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Jun 23, 2020 9:03 am    Assunto: Responder com Citação

Bom dia,

Não tenho experiência com o MySQL mas acredito que a sintaxe do Distinct e o seu funcionamento sejam padrão.
Pelo padrão, o Distinct vale para todas as colunas selecionadas, então uma linha deixa de constar no resultado quando o valor de todas as colunas selecionadas são iguais.
E da forma como está a sua consulta, você poderia optar pelo Distinct ou pelo Group By, qualquer um dos dois faria com que as linhas com valores iguais sejam omitidas do resultado.

Espero que ajude


Editado pela última vez por imex em Qui Set 16, 2021 5:29 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
andvagner
Novato
Novato


Registrado: Domingo, 14 de Junho de 2020
Mensagens: 13

MensagemEnviada: Ter Jun 23, 2020 1:02 pm    Assunto: Responder com Citação

Bom dia imex obrigado pela ajuda!

O que estou tentando fazer é o seguinte, nesta tabela abaixo, preciso que seja filtrado apenas um registro cujo leito seja '001' seguido pelo nome da paciente e a data mais recente porem preciso que seja omitida as demais. O problema é que o DISTINCT está me retornando todos os valores, acho que estou fazendo da forma errada.

Código:
+-----------+--------------------+------------+
| Leito_Pac | Nome_Pac           | Data_Pac   |
+-----------+--------------------+------------+
| 001       | MARINA SOUZA       | 2020-06-23 |
| 001       | FABIOLA DE FREITAS | 2020-06-23 |
| 001       | KAROLYNE           | 2020-06-22 |
| 001       | MARCELA FREITAS    | 2020-06-22 |
| 001       | MONCA              | 2020-06-21 |
| 001       | JULIA              | 2020-06-21 |
| 001       | AUGUSTA            | 2020-06-21 |
| 001       | MANOELA            | 2020-06-21 |
| 001       | FABI               | 2020-06-21 |
| 001       | FERNANDA           | 2020-06-21 |
| 001       | JESSICA            | 2020-06-20 |
| 001       | ERNESTA            | 2020-06-20 |
| 001       | LAURA              | 2020-06-20 |
+-----------+--------------------+------------+
13 rows in set, 1 warning (0.00 sec)


mysql> select DISTINCT Leito_Pac,Nome_Pac,Data_Pac from Tab_Pacientes WHERE Leito_Pac=001 GROUP BY Leito_Pac,Nome_Pac,Data_Pac order by Data_Pac desc;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Jun 23, 2020 2:46 pm    Assunto: Responder com Citação

Nesse caso experimente adicionar a clausula Limit conforme o exemplo abaixo:

Código:
select Leito_Pac,Nome_Pac,Data_Pac
from Tab_Pacientes
WHERE Leito_Pac=001
order by Data_Pac desc
limit 1


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
andvagner
Novato
Novato


Registrado: Domingo, 14 de Junho de 2020
Mensagens: 13

MensagemEnviada: Ter Jun 23, 2020 4:20 pm    Assunto: Responder com Citação

Muito bom imex funcionou mas apareceu outro problema,independente se é leito 001,002,003... a função sempre irá me retornar o último cadastro.


select * from Tab_Pacientes Where Leito_Pac like '%' order by Data_Pac desc,Hora_Pac desc limit 1;

No entanto preciso do último cadastro de cada leito.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
andvagner
Novato
Novato


Registrado: Domingo, 14 de Junho de 2020
Mensagens: 13

MensagemEnviada: Ter Jun 23, 2020 9:44 pm    Assunto: Resolvido! Responder com Citação

Mais uma vez obrigado pelo auxílio.
Ficou dessa forma.

Código:
DM.ZConsultaPac.Close;
  DM.ZConsultaPac.sql.Clear;
  If RgGerarCensoPac.ItemIndex = 0 Then
  DM.ZConsultaPac.sql.Add ('with CTE_RN as (Select *, row_number() over(partition by Leito_Pac order by Data_Pac desc, Hora_Pac desc) as RN From Tab_Pacientes) select * from CTE_RN where RN = 1');
  DM.ZConsultaPac.Open;
  edtPesquisa.Text := '';
  edtPesquisa.SetFocus;
  rgpOpcoes.ItemIndex := - 1;

No evento onclick do RadioGroup quando selecionado o dbgrid me mostra todos o leitos ocupados pela última paciente.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB