PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment sélectionner un UUID minimum avec une jointure externe gauche ?

Trouvé une solution, s'avère que la fonction comparant les UUID de cette publication n'est pas correct. Voici la fonction que j'ai écrite, qui est probablement moins performante, qui passe tous les cas où elle a échoué auparavant :

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