Página 1 de 1
Trazer sempre o último resultado
Enviado: Seg, 29 Ago 2016 11:00 am
por Dualogic
Bom dia Pessoal,
Estou começando a trabalhar com SQL e estou com um problema preciso sempre trazer o último registro de uma tabela no seguinte SQL
Selecionar tudo
select substr(obter_idade_pf(c.cd_pessoa_fisica, sysdate, 'A'),1,100)qt_idade,
substr(obter_nome_paciente_setor(a.nr_seq_paciente),1,60) nm_paciente,
substr(obter_nome_medico_setor(a.nr_seq_paciente),1,60) nm_medico,
substr(obter_desc_prot_medic(a.nr_seq_paciente),1,255) ds_protoc,
obter_checagem_quimioterapia(a.nr_seq_atendimento)status,
substr(obter_desc_cid(d.CD_CID),1,200)ds_doenca,
a.qt_peso
from paciente_atendimento a,
atendimento_paciente c,
[b]uop_cid_paciente d[/b]
where dt_prevista between :dt_inicial and fim_dia(:dt_final)
and d.cd_pessoa_fisica = c.cd_pessoa_fisica
and exists (select 1
from paciente_setor b
where b.nr_seq_paciente = a.nr_seq_paciente
and b.ie_status = 'A')
and a.dt_cancelamento is null
and a.cd_estabelecimento = :cd_estabelecimento
and a.nr_atendimento = c.nr_atendimento
order by nm_paciente
preciso que traga somente e sempre o primeiro registro dessa tabela em negrito
Re: Trazer sempre o último resultado
Enviado: Seg, 29 Ago 2016 2:29 pm
por spernega
Boa tarde,
Na tabela uop_cid_paciente você tem algum campo que possa ser usado como parâmetro?
por exemplo:
Selecionar tudo
And d.dt_incl = (Select max(dt_incl)
from uop_cid_paciente
where cd_pessoa_fisica = d.cd_pessoa_fisica)
é mais ou menos isso que você quer?
Re: Trazer sempre o último resultado
Enviado: Seg, 29 Ago 2016 5:36 pm
por Dualogic
isso, exatamente isso,
só não entendi essa parte:
Qual parâmetro devo passar ?
Re: Trazer sempre o último resultado
Enviado: Ter, 30 Ago 2016 7:46 am
por spernega
Oi,
No exemplo, caso a sua tabela uop_cid_paciente tiver mais que um registro para cada paciente e você quiser trazer sempre o último registro dele, você poderia filtrar pela data de inclusão do registro.
A subquery trará o último registro lançado com base na data de inclusão ou outro campo único que exista na tabela.
Ou seja, você pesquisará apenas as consultas referentes a última entrada do paciente.
Agora uma resposta mais "estranha":
Se você quiser apenas que o select retorne apenas uma linha, você pode incluir mais uma clausula a na query:
-- para trazer o primeito registro que encontra:
Selecionar tudo
where rownum <= 1
and dt_prevista between :dt_inicial and fim_dia(:dt_final)
and d.cd_pessoa_fisica = c.cd_pessoa_fisica
and exists (select 1
from paciente_setor b
where b.nr_seq_paciente = a.nr_seq_paciente
and b.ie_status = 'A')
and a.dt_cancelamento is null
and a.cd_estabelecimento = :cd_estabelecimento
and a.nr_atendimento = c.nr_atendimento
order by nm_paciente
Para trazer o último registro você colocaria um order by campo desc
Mas acho que não é isso que você precisa.
De qualquer forma, se der, explique mais detalhadamente o que você precisa.
Re: Trazer sempre o último resultado
Enviado: Ter, 30 Ago 2016 9:13 am
por Dualogic
Olá,
Dei uma melhorada e uma "enxugada" no meu código e ficou assim,
Selecionar tudo
select substr(obter_idade_pf(c.cd_pessoa_fisica, sysdate, 'A'),1,100)qt_idade,
substr(obter_nome_paciente_setor(a.nr_seq_paciente),1,60) nm_paciente,
substr(obter_nome_medico_setor(a.nr_seq_paciente),1,60) nm_medico,
substr(obter_desc_prot_medic(a.nr_seq_paciente),1,255) ds_protoc,
substr(obter_desc_cid(d.CD_CID),1,200)ds_doenca,
a.qt_peso
from paciente_atendimento a,
atendimento_paciente c,
uop_cid_paciente d
where a.dt_prevista between :dt_inicial and fim_dia (:dt_final)
and d.dt_diagnostico = (select max(dt_diagnostico) from uop_cid_paciente where d.cd_pessoa_fisica = c.cd_pessoa_fisica)
and a.dt_cancelamento is null
and a.cd_estabelecimento = :cd_estabelecimento
and a.nr_atendimento = c.nr_atendimento
and d.cd_pessoa_fisica = c.cd_pessoa_fisica
order by nm_paciente
Porém mesmo informando os parâmetros a consulta sai em branco, e não sei mais o que fazer pra resolver este problema
Re: Trazer sempre o último resultado
Enviado: Ter, 30 Ago 2016 9:21 am
por spernega
Tem como você gerar um script com a criação das tabelas e as cargas?
dai eu tento reproduzir aqui.
Re: Trazer sempre o último resultado
Enviado: Ter, 30 Ago 2016 9:28 am
por Dualogic
Você quer um script do meu banco ?
Re: Trazer sempre o último resultado
Enviado: Ter, 30 Ago 2016 9:32 am
por spernega
Só das tabelas envolvidas na query.
Com os inserts, se não for muito grande+
Re: Trazer sempre o último resultado
Enviado: Ter, 30 Ago 2016 9:51 am
por Dualogic
Volto a dizer, estou iniciando com SQL e conheço pouco das ferramentas para tal, como faço para gerar este script no SQL Navigator 6.1
Re: Trazer sempre o último resultado
Enviado: Ter, 30 Ago 2016 9:58 am
por spernega
Eu não uso o SQL Navigator, sou da velha guarda, uso só o sqlplus
Deve ter opções de gerar DDL das tabelas e os INSERTS , pelo menos no sqldeveloper tem.
Re: Trazer sempre o último resultado
Enviado: Ter, 30 Ago 2016 9:58 am
por Dualogic
Uma das tabelas desta query possui 136008 registros
Re: Trazer sempre o último resultado
Enviado: Ter, 30 Ago 2016 9:59 am
por spernega
é muita coisa,
Se conseguir, manda só os scripts mesmo
Re: Trazer sempre o último resultado
Enviado: Ter, 30 Ago 2016 12:46 pm
por geovani
Opa!
Tenta assim:
Selecionar tudo
select
substr(obter_idade_pf(c.cd_pessoa_fisica,sysdate,'A'),1,100) qt_idade,
substr(obter_nome_paciente_setor(a.nr_seq_paciente),1,60) nm_paciente,
substr(obter_nome_medico_setor(a.nr_seq_paciente),1,60) nm_medico,
substr(obter_desc_prot_medic(a.nr_seq_paciente),1,255) ds_protoc,
substr(obter_desc_cid(d.CD_CID),1,200)mds_doenca,
a.qt_peso
from
paciente_atendimento a,
atendimento_paciente c,
uop_cid_paciente d
where
a.dt_prevista between :dt_inicial and fim_dia (:dt_final)
and d.dt_diagnostico = (
select
max(ultimo.dt_diagnostico)
from
uop_cid_paciente ultimo
where
d.cd_pessoa_fisica = ultimo.cd_pessoa_fisica
)
and a.dt_cancelamento is null
and a.cd_estabelecimento = :cd_estabelecimento
and a.nr_atendimento = c.nr_atendimento
and d.cd_pessoa_fisica = c.cd_pessoa_fisica