PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come selezionare l'UUID minimo con il join esterno sinistro?

Trovato una soluzione, risulta la funzione che confronta gli UUID da questo post non è corretto. Ecco la funzione che ho scritto, che probabilmente è meno performante, che supera tutti i casi in cui prima non funzionava:

    CREATE FUNCTION min_uuid(uuid, uuid)
    RETURNS uuid AS $$
    BEGIN
        -- if they're both null, return null
        IF $2 IS NULL AND $1 IS NULL THEN
            RETURN NULL ;
        END IF;

        -- if just 1 is null, return the other
        IF $2 IS NULL THEN
            RETURN $1;
        END IF ;
        IF $1 IS NULL THEN
            RETURN $2;
          END IF;

        -- neither are null, return the smaller one
        IF $1 > $2 THEN
            RETURN $2;
        END IF;

        RETURN $1;
    END;
    $$ LANGUAGE plpgsql;


    create aggregate min(uuid) (
      sfunc = min_uuid,
      stype = uuid,
      combinefunc = min_uuid,
      parallel = safe,
      sortop = operator (<)
    );