PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie wähle ich die minimale UUID mit Left Outer Join aus?

Eine Lösung gefunden, stellt sich die Funktion heraus, die UUIDs von dieser Beitrag ist nicht korrekt. Hier ist die Funktion, die ich geschrieben habe, die wahrscheinlich weniger leistungsfähig ist und alle Fälle durchläuft, in denen sie zuvor fehlgeschlagen ist:

    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 (<)
    );