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 

Como fazer o Label receber ultimo registro?

 
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: Sáb Jun 20, 2020 7:48 pm    Assunto: Como fazer o Label receber ultimo registro? Responder com Citação

Bom noite amigos!

Estou tentando montar um painel com informações do banco de dados com o último paciente que ocupou o leito 001 da tabela pacientes, e depois fazer o label do painel receber o nome do paciente referente ao leito. Desde já agradeço quem puder ajudar.

Segue o código.


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
with ZQuery1 do
Begin
Close;
sql.Clear;
sql.Add('Select * From Tab_Pacientes Where Leito_Pac order by Data_Pac desc, Hora_Pac desc');
open;
if ZQuery1.FieldByName('Leito_Pac').AsString='001' then
Label1.Caption:=ZQuery1.FieldByName('Nome_Pac').AsString;

if ZQuery1.FieldByName('Leito_Pac').AsString='002' then
Label2.Caption:=ZQuery1.FieldByName('Nome_Pac').AsString;
end;

No entanto somente o label1 está recebendo o valor.
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:49 pm    Assunto: Responder com Citação

Boa tarde,

Você quer exibir o último paciente de cada leito?
Qual versão do MySQL você está utilizando?


Editado pela última vez por imex em Dom Out 01, 2023 5:41 pm, num total de 2 vezes
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 3:51 pm    Assunto: Responder com Citação

Boa tarde!
É isso mesmo exibir o ultimo de cada leito.

Estou usando a versão 8 do MYSQL.

[root@server ~]# mysql -V
mysql Ver 8.0.17 for Linux on x86_64 (Source distribution)
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 4:37 pm    Assunto: Responder com Citação

Segue uma sugestão para testes:

Código:
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


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 9:37 pm    Assunto: Resolvido! Responder com Citação

Boa noite imex!

Olha você está de parabéns, o código funcionou perfeitamente, agora vou poder gerar o relatório das últimas pacientes que estão ocupando os leitos.

with ZQuery1 do
Begin
Close;
sql.Clear;
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');
open;
if ZQuery1.FieldByName('Leito_Pac').AsString='001' then
Label1.Caption:=ZQuery1.FieldByName('Nome_Pac').AsString;

Muito Obrigado!
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: Qua Jun 24, 2020 9:14 am    Assunto: Como este código ficaria na versão 5.5 do MYSQL? Responder com Citação

Bom dia!
Como este código ficaria na versão 5.5 do MYSQL?


Código:

with ZQuery1 do
Begin
Close;
sql.Clear;
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');
open;
if ZQuery1.FieldByName('Leito_Pac').AsString='001' then
Label1.Caption:=ZQuery1.FieldByName('Nome_Pac').AsString;
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: Qua Jun 24, 2020 11:09 am    Assunto: Responder com Citação

Bom dia,

Experimente fazer uns testes dessa forma para ver se funciona:

Código:
Select p.*
From Tab_Pacientes as p
inner join
(
    select Leito_Pac, max(timestamp(Data_Pac, Hora_Pac)) as DataHora
    from Tab_Pacientes
    group by Leito_Pac
) as m on m.Leito_Pac = p.Leito_Pac and m.DataHora = timestamp(p.Data_Pac, p.Hora_Pac)


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: Qua Jun 24, 2020 5:21 pm    Assunto: Responder com Citação

Olha funcionou! ficou muito bom, só que agora está intermitente uma hora fica na sequência outra hora sai, os leitos tipo string estão aparecendo intercalados, já tentei usar o ORDER BY ASC mas não deu certo.

Código:

DM.ZConsultaPac.Close;
DM.ZConsultaPac.sql.Clear;
If rgpOpcoes.ItemIndex = 0 Then
DM.ZConsultaPac.sql.Add ('Select p.* From Tab_Pacientes');
DM.ZConsultaPac.sql.Add ('as p inner join (select Leito_Pac, max(timestamp(Data_Pac, Hora_Pac))');
DM.ZConsultaPac.sql.Add ('as DataHora  from Tab_Pacientes group by Leito_Pac order by Leito_Pac Desc) as m on m.Leito_Pac = p.Leito_Pac and m.DataHora = timestamp(p.Data_Pac, p.Hora_Pac)');
DM.ZConsultaPac.Open;
edtPesquisa.Text := '';
edtPesquisa.SetFocus;



Código:

+------------+----------+----------------+---------+---------+---------+-----------+-------------------------+---------+---------+------------+----------+
| Codigo_Pac | Nome_Pac | Identidade_Pac | CPF_Pac | Tel_Pac | Cel_Pac | Leito_Pac | Setor_Pac               | Sit_Pac | OBS_Pac | Data_Pac   | Hora_pac |
+------------+----------+----------------+---------+---------+---------+-----------+-------------------------+---------+---------+------------+----------+
|          5 | SUANE    | 56356          | NULL    | NULL    | NULL    | 001   | ADM.GIN.T╔RREO          | NULL    | NULL    | 2020-06-24 | 15:15:49 |
|          6 | RAIMUNDA | 45245          | NULL    | NULL    | NULL    | 002   | ADM.GIN.T╔RREO          | NULL    | NULL    | 2020-06-24 | 15:16:24 |
|          7 | DEBORA   | 452435         | NULL    | NULL    | NULL    | 003   | ADM.GIN.T╔RREO          | NULL    | NULL    | 2020-06-24 | 15:16:45 |
|          8 | MAGDA    | 657456         | NULL    | NULL    | NULL    | PAT1   | CCO-PATOLËGICO 3║ ANDAR | NULL    | NULL    | 2020-06-24 | 15:33:10 |
|          9 | VANESSA  | 64356345       | NULL    | NULL    | NULL    | 004   | ADM.GIN.T╔RREO          | NULL    | NULL    | 2020-06-24 | 15:33:26 |
|         10 | JUCIMARA | 56354          | NULL    | NULL    | NULL    | PAT2   | CCO-PATOLËGICO 3║ ANDAR | NULL    | NULL    | 2020-06-24 | 16:00:33 |
|         11 | MUNDINHA | 3452345        | NULL    | NULL    | NULL    | 005   | ADM.GIN.T╔RREO          | NULL    | NULL    | 2020-06-24 | 16:00:49 |
+------------+----------+----------------+---------+---------+---------+-----------+-------------------------+---------+---------+------------+----------+
7 rows in set (0.00 sec)


Código:

+------------+----------+----------------+---------+---------+---------+-----------+-------------------------+---------+---------+------------+----------+
| Codigo_Pac | Nome_Pac | Identidade_Pac | CPF_Pac | Tel_Pac | Cel_Pac | Leito_Pac | Setor_Pac               | Sit_Pac | OBS_Pac | Data_Pac   | Hora_pac |
+------------+----------+----------------+---------+---------+---------+-----------+-------------------------+---------+---------+------------+----------+
|          6 | RAIMUNDA | 45245          | NULL    | NULL    | NULL    | 002   | ADM.GIN.T╔RREO          | NULL    | NULL    | 2020-06-24 | 15:16:24 |
|          7 | DEBORA   | 452435         | NULL    | NULL    | NULL    | 003   | ADM.GIN.T╔RREO          | NULL    | NULL    | 2020-06-24 | 15:16:45 |
|          9 | VANESSA  | 64356345       | NULL    | NULL    | NULL    | 004   | ADM.GIN.T╔RREO          | NULL    | NULL    | 2020-06-24 | 15:33:26 |
|         11 | MUNDINHA | 3452345        | NULL    | NULL    | NULL    | 005   | ADM.GIN.T╔RREO          | NULL    | NULL    | 2020-06-24 | 16:00:49 |
|         12 | LUANA    | 52345          | NULL    | NULL    | NULL    | PAT1   | CCO-PATOLËGICO 3║ ANDAR | NULL    | NULL    | 2020-06-24 | 16:34:44 |
|         15 | KATIA    | 63456          | NULL    | NULL    | NULL    | 001   | ADM.GIN.T╔RREO          | NULL    | NULL    | 2020-06-24 | 16:38:57 |
|         16 | FERNANDA | 45234523       | NULL    | NULL    | NULL    | PAT2   | CCO-PATOLËGICO 3║ ANDAR | NULL    | NULL    | 2020-06-24 | 16:39:18 |
+------------+----------+----------------+---------+---------+---------+-----------+-------------------------+---------+---------+------------+----------+
7 rows in set (0.01 sec)
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: Qua Jun 24, 2020 6:13 pm    Assunto: Responder com Citação

Como ficou acrescentando o Order By no final?

Código:
order by Leito_Pac
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: Qui Jun 25, 2020 11:49 am    Assunto: Resolvido! Responder com Citação

Show ficou perfeito! Você é genial. Mais uma vez muito obrigado pela ajuda!

Para versão MYSQL 5, ficou dessa forma;

Código:

DM.ZConsultaPac.Close;
DM.ZConsultaPac.sql.Clear;
If rgpOpcoes.ItemIndex = 0 Then
DM.ZConsultaPac.sql.Add ('Select p.* From Tab_Pacientes');
DM.ZConsultaPac.sql.Add ('as p inner join (select Leito_Pac, max(timestamp(Data_Pac, Hora_Pac))');
DM.ZConsultaPac.sql.Add ('as DataHora  from Tab_Pacientes group by Leito_Pac) as m on m.Leito_Pac = p.Leito_Pac and m.DataHora = timestamp(p.Data_Pac, p.Hora_Pac) order by Leito_Pac');
DM.ZConsultaPac.Open;
edtPesquisa.Text := '';
edtPesquisa.SetFocus;
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