Fórum Como obter o valor maximo de uma data em Stored Procedure #47550
18/10/2004
0
CREATE PROCEDURE ULTIMA_CONTA (
CONTA INTEGER)
RETURNS (
MATRICULA VARCHAR (20),
GUIA VARCHAR (14),
TITULAR VARCHAR (60),
ORGAO VARCHAR (50),
MAXIMO DATE)
AS
DECLARE VARIABLE DAT DATE;
BEGIN
FOR SELECT AMMT, AMGA, AMTI, AMOR, MAX (AMDA) FROM AMBULATORIO
WHERE AMPA=:CONTA
GROUP BY AMMT, AMGA, AMTI, AMOR
UNION ALL
SELECT INMT, INGA, INTI, INOR, MAX (INDA) FROM INTERNACAO
WHERE INPA=:CONTA
GROUP BY INMT, INGA, INTI, INOR
INTO :MATRICULA, :GUIA, :TITULAR, :ORGAO, MAXIMO DO
SUSPEND;
END
Sei que meu erro esta aqui
[b:224a2fabac] GROUP BY INMT, INGA, INTI, INOR[/b:224a2fabac]
porém não como fazer sem o MAX
alguem tem uma solução ...
Sremulador
Curtir tópico
+ 0Posts
18/10/2004
Afarias
não sei mas apenas certifíque-se q os tipo dos campos são os mesmos::
AMMT = INMT
AMGA = INGA
AMTI = INTI
AMOR = INOR
e, se for o caso de um cast nas funções::
cast(MAX(AMDA) as Date)
cast(MAX(INDA) as Date)
T+
Gostei + 0
18/10/2004
Sremulador
Sim os campos são os mesmos a procedure esta me dando retorno não ha erro e sim o retorno não e o esperado ele me retorna diversas datas enquanto deveria ser uma só ou melhor a maior....
Gostei + 0
18/10/2004
Afarias
[AMMT,AMGA,AMTI e AMOR] diferentes, estão está perfeito.
T+
Gostei + 0
18/10/2004
Sremulador
Valeu
Gostei + 0
18/10/2004
Afarias
T+
Gostei + 0
18/10/2004
Emerson Nascimento
CREATE PROCEDURE ULTIMA_CONTA(CONTA INTEGER)
RETURNS (
    MATRICULA VARCHAR (20),
    GUIA VARCHAR (14),
    TITULAR VARCHAR (60),
    ORGAO VARCHAR (50),
    MAXIMO DATE)
AS
DECLARE VARIABLE DAT DATE;
BEGIN
    DAT := (SELECT MAX(AMDA) FROM FROM AMBULATORIO WHERE AMPA = :CONTA)
    IF DAT > (SELECT MAX(INDA) FROM INTERNACAO WHERE INPA = :CONTA) THEN
        FOR SELECT AMMT, AMGA, AMTI, AMOR, AMDA FROM AMBULATORIO
            WHERE AMPA = :CONTA AND AMDA = :DAT
        INTO :MATRICULA, :GUIA, :TITULAR, :ORGAO, MAXIMO DO
        SUSPEND
    ELSE
        FOR SELECT INMT, INGA, INTI, INOR, INDA FROM INTERNACAO
            WHERE INPA = :CONTA AND INDA =
            (SELECT MAX(INDA) FROM INTERNACAO WHERE INPA = :CONTA)
        INTO :MATRICULA, :GUIA, :TITULAR, :ORGAO, MAXIMO DO
        SUSPEND;
END
Gostei + 0
19/10/2004
Sremulador
Gostei + 0
19/10/2004
Emerson Nascimento
vc quer a maior data de cada tabela? é isso? se for, faça assim:
CREATE PROCEDURE ULTIMA_CONTA(CONTA INTEGER)
RETURNS (
    MATRICULA VARCHAR (20),
    GUIA VARCHAR (14),
    TITULAR VARCHAR (60),
    ORGAO VARCHAR (50),
    MAXIMO DATE)
AS
BEGIN
    FOR SELECT AMMT, AMGA, AMTI, AMOR, AMDA FROM AMBULATORIO
            WHERE AMPA = :CONTA AND AMDA =
                (SELECT MAX(AMDA) FROM FROM AMBULATORIO WHERE AMPA = :CONTA)
            UNION ALL
            SELECT INMT, INGA, INTI, INOR, INDA FROM INTERNACAO
            WHERE INPA = :CONTA AND INDA =
                (SELECT MAX(INDA) FROM INTERNACAO WHERE INPA = :CONTA)
    INTO :MATRICULA, :GUIA, :TITULAR, :ORGAO, MAXIMO DO
    SUSPEND;
END
Gostei + 0
20/10/2004
Sremulador
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)