Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [SQL] max tra campi di uno stesso record

    Ciao, scusate l'incapacità ma ho questo dilemma sql:
    Ho una tabella con tre campi data

    id | data1 | data2 | data3
    ---------------------------
    2 | 2001 | 2002 | 2003
    3 | 2004 | null | 2005

    vorrei selezionare per ogni record il valore massimo di questi tre campi...

    L' inesperienza mi suggerirebbe una query del genere

    select id, max(data1,data2,data3) from tabella

    ma l'esperienza mi dice che non funziona...

    Qualcuno mi da una dritta...

    Saluti JUNK

    P.S. sto usando PGsql...

  2. #2
    autochiudo questo post:
    in PGsql ho risolto cosi:

    ho creato una nuova funzione del tipo:

    CREATE OR REPLACE FUNCTION "dwh_data_max" (data1 date, data2 date) RETURNS date AS $body$
    DECLARE
    BEGIN
    IF ( data1 IS NULL AND data2 IS NULL) THEN
    RETURN null;
    ELSE IF ( data1 IS NOT NULL AND data2 IS NULL) THEN
    RETURN data1;
    ELSE IF ( data1 IS NULL AND data2 IS NOT NULL) THEN
    RETURN data2;
    ELSE IF( data1 > data2 ) THEN
    RETURN data1;
    ELSE IF( data1 < data2 ) THEN
    RETURN data2;
    ELSE IF( data1 = data2 ) THEN
    RETURN data1;
    END IF;
    END IF;
    END IF;
    END IF;
    END IF;
    END IF;
    END;
    $body$ LANGUAGE 'plpgsql' STABLE CALLED ON NULL INPUT SECURITY INVOKER

    dopo ho creto un nuovo operatore:

    CREATE OPERATOR !# (
    PROCEDURE = dwh_data_max,
    LEFTARG = date,
    RIGHTARG = date);

    adesso la query diventa cosi:

    select id, (data1 !# data2 !# data3) as datamax from tabella

    ho iniziato da qualche giorno a lavorare su postgres....
    perciò sono accettati commenti e opinioni sulla soluzione scelta
    saluti JUNK

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923

    Re: [SQL] max tra campi di uno stesso record

    Originariamente inviato da junk
    Ciao, scusate l'incapacità ma ho questo dilemma sql:
    Ho una tabella con tre campi data

    id | data1 | data2 | data3
    ---------------------------
    2 | 2001 | 2002 | 2003
    3 | 2004 | null | 2005

    vorrei selezionare per ogni record il valore massimo di questi tre campi...

    L' inesperienza mi suggerirebbe una query del genere

    select id, max(data1,data2,data3) from tabella

    ma l'esperienza mi dice che non funziona...

    Qualcuno mi da una dritta...

    Saluti JUNK

    P.S. sto usando PGsql...
    Anche in postgres c'è la funzione greatest come in mysql

    select id,greatest(data1,data2,data3) from tabella


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.