Dificuldades com um select.......

Delphi

15/08/2003

Ola,

Tenho um select que funciona quando executado direto no banco e quando executo no delphi retorna vazio. Não da erro, por favor se alguem puder me auxiliar..... Segue o bixo papão:
select * from
[color=red:56458c7d99] (select max(cz06_dtat),cz04_nome from
cz060001,cz040001,cz080001
where
cz06_nrop=cz04_nrop and
cz06_med=cz08_crem and
cz08_nome like ´¬ANGELA¬´
group by cz04_nome
)[/color:56458c7d99] as ff where ff.max between ´2003-03-01´ and ´2003-03-30´;

Quando executo só o select interno retorna ok somente um registro para cada pessoa atendido pela ANGELA com a data mais atual. No entanto quero deste resultado somente os que o ultimo atendimento tenha ocorrido no intervalo definido.

ex: JOAO 01/01/03 -> ANGELA
JOAO 10/02/03 -> ANGELA
JOAO 15/03/03 -> ANGELA
MARIA 01/01/03 -> ANGELA
MARIA 05/02/03 -> ANGELA

SUPONDO QUE ESTES SEJAM TODOS OS MEUS DADOS.
DO PRIMEIRO SELECT VAI SAIR:
JOAO 15/03/03 -> ANGELA
MARIA 05/02/03 -> ANGELA

DO SELECT EXTERNO DEVERIA EXTRAIR SOMENTE A LINHA DO JOAO:


QUANDO EXECUTO DIRETO NO BANCO ESTE É O RESULTADO. QUANDO EXECUTO NO DELPHI O RESULTADO É ZERO REGSTROS.
SE EXECUTAR SOMENTE SEM O BETWEEN ...... TAMBEM DEVERIA RETORNAR O MESMO RESULTADO DO SELECT INTERNO. NO ENTANTO RETORNA ZERO. COMO SE O AS NÃO ESTIVESSE SENDO RECONHECIDO.

AGRADEÇO QUALQUER :idea:


Mariah

Mariah

Curtidas 0

Respostas

4_olho

4_olho

15/08/2003

Percebo que os formatos de datas são diferentes :

dd/mm/aa e aaaa-mm-dd

Não seria melhor padronizar ? Qual Banco de dados está usando ?


GOSTEI 0
Mariah

Mariah

15/08/2003

--> Testei mudando o formato de data:
st := ´select * from (select max(cz06_dtat),cz04_nome from cz060001,cz040001,cz080001 where cz06_nrop=cz04_nrop and cz06_med=cz08_crem and cz08_nome like ´+´´´¬ANGELA¬´´´+´ group by cz04_nome ) as ff where ff.max between ´+´´´01-03-2003´´´+´ and ´+´´´30-03-2003´´´;
Retornou zero registros.

--> Testei conforme linha abaixo ou seja sem datas:
st := ´select * from (select max(cz06_dtat),cz04_nome from cz060001,cz040001,cz080001 where cz06_nrop=cz04_nrop and cz06_med=cz08_crem and cz08_nome like ´+´´´¬ANGELA¬´´´+´ group by cz04_nome ) as ff ´;
Retornou zero registros.

--> Testei assim:
st := ´select max(cz06_dtat),cz04_nome from cz060001,cz040001,cz080001 where cz06_nrop=cz04_nrop and cz06_med=cz08_crem and cz08_nome like ´+´´´¬ANGELA¬´´´+´ group by cz04_nome ´;
Retornou 273 registros.

Como posso resolver !
Mariah


GOSTEI 0
Weber

Weber

15/08/2003

Eu achei seu select um pouco confuso e não consegui identificar quantas tabelas você está usando, pois os nomes do campos são meio estranhos.
Mas veja bem:
Se você estiver trabalhando com duas ou mais tabelas é importante que você identifique que campo é de que tabela, por Exemplo:

Select a.* from Clientes a

Não sei se é o seu caso, pois como eu disse não entendi direito seus campos, e eu gostaria de salientar uma coisa, usar select dentro de select pode deixar seu sistema lento.


GOSTEI 0
Adilsond

Adilsond

15/08/2003

select cz04_nome,
max(cz06_dtat)
from cz060001,
cz040001,
cz080001
where cz06_nrop = cz04_nrop
and cz06_med = cz08_crem
and cz08_nome like ´¬ANGELA¬´
group by cz04_nome
having max(cz06_dtat) between :DtIni and :DtFin


ParamByName(´DtIni´).AsDate := StrToDate(´2003-03-01´);
ParamByName(´DtFin´).AsDate := StrToDate(´2003-03-30´);


ou se sua base for Oracle:

select cz04_nome,
max(cz06_dtat)
from cz060001,
cz040001,
cz080001
where cz06_nrop = cz04_nrop
and cz06_med = cz08_crem
and cz08_nome like ´¬ANGELA¬´
group by cz04_nome
having max(cz06_dtat) between to_date(´2003-03-01´,´yyyy-mm-dd´) and to_date(´2003-03-30´,´yyyy-mm-dd´)


GOSTEI 0
Daaneto

Daaneto

15/08/2003

Dependendo do banco que você utilizar o problema todo pode ser o símbolo de percentagem.

Alguns bancos utilizam como string coringa o * (asterisco), outros o ¬ (percentagem).


O que acho que pode resolver o problema citado é mudar ¬ANGELA¬ para
*ANGELA*.

Com ¬ANGELA¬ é interpretado como a string completa ´¬ANGELA¬´,
´*ANGELA*´ é interpretado como uma string que possui qualquer coisa ao início e ao fim de ANGELA.


GOSTEI 0
Mariah

Mariah

15/08/2003

Obrigado pelas colaborações, a situação que usei foi a do Adilson. Estou usando banco de dados Postgres com acesso pelo Zeos.
:wink:


GOSTEI 0
POSTAR