Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
andvagner Novato
Registrado: Domingo, 14 de Junho de 2020 Mensagens: 13
|
Enviada: Sáb Jun 20, 2020 7:48 pm Assunto: Como fazer o Label receber ultimo registro? |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Jun 23, 2020 2:49 pm Assunto: |
|
|
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 |
|
|
andvagner Novato
Registrado: Domingo, 14 de Junho de 2020 Mensagens: 13
|
Enviada: Ter Jun 23, 2020 3:51 pm Assunto: |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Jun 23, 2020 4:37 pm Assunto: |
|
|
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 |
|
|
andvagner Novato
Registrado: Domingo, 14 de Junho de 2020 Mensagens: 13
|
Enviada: Ter Jun 23, 2020 9:37 pm Assunto: Resolvido! |
|
|
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 |
|
|
andvagner Novato
Registrado: Domingo, 14 de Junho de 2020 Mensagens: 13
|
Enviada: Qua Jun 24, 2020 9:14 am Assunto: Como este código ficaria na versão 5.5 do MYSQL? |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Jun 24, 2020 11:09 am Assunto: |
|
|
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 |
|
|
andvagner Novato
Registrado: Domingo, 14 de Junho de 2020 Mensagens: 13
|
Enviada: Qua Jun 24, 2020 5:21 pm Assunto: |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Jun 24, 2020 6:13 pm Assunto: |
|
|
Como ficou acrescentando o Order By no final?
Código: | order by Leito_Pac |
|
|
Voltar ao Topo |
|
|
andvagner Novato
Registrado: Domingo, 14 de Junho de 2020 Mensagens: 13
|
Enviada: Qui Jun 25, 2020 11:49 am Assunto: Resolvido! |
|
|
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 |
|
|
|