|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
andvagner Novato
Registrado: Domingo, 14 de Junho de 2020 Mensagens: 13
|
Enviada: Ter Jun 23, 2020 1:20 am Assunto: Qual a sintax correta do DISTINCT no MYSQL 8? |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Jun 23, 2020 9:03 am Assunto: |
|
|
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 |
|
|
andvagner Novato
Registrado: Domingo, 14 de Junho de 2020 Mensagens: 13
|
Enviada: Ter Jun 23, 2020 1:02 pm Assunto: |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Jun 23, 2020 2:46 pm Assunto: |
|
|
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 |
|
|
andvagner Novato
Registrado: Domingo, 14 de Junho de 2020 Mensagens: 13
|
Enviada: Ter Jun 23, 2020 4:20 pm Assunto: |
|
|
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 |
|
|
andvagner Novato
Registrado: Domingo, 14 de Junho de 2020 Mensagens: 13
|
Enviada: Ter Jun 23, 2020 9:44 pm Assunto: Resolvido! |
|
|
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 |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|