PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL sprawdzający element poprzedniego rekordu


Nie działa tak, jak masz. funkcja okna nie można tak nazwać. Twoja zmienna rekordu r jest jak wbudowany kursor w FOR pętla. Wewnątrz pętli widoczny jest tylko bieżący wiersz wyniku. Trzeba by zintegrować funkcję okna lag() go do początkowego SELECT .

Ale ponieważ i tak przeglądasz wiersze w pasującej kolejności, możesz to zrobić w inny sposób.

Rozważmy ten w dużej mierze przepisany przykład. Zwraca w pierwszym naruszającym wierszu:

CREATE OR REPLACE FUNCTION q8(_day date)
  RETURNS text AS
$BODY$
DECLARE
    r            record;
    last_enddate date;

BEGIN
FOR r IN
    SELECT *
       -- ,lag(r.endDate) OVER (ORDER BY startDate) AS last_enddate
       -- commented, because I supply an alternative solution
    FROM   periods
    ORDER  BY startDate
LOOP
    IF _day BETWEEN r.startDate AND r.endDate THEN
        RETURN 'Violates condition 1';  -- I return differing results
    ELSIF _day BETWEEN (r.startDate - 7) AND r.startDate THEN
        RETURN 'Violates condition 2';
    ELSIF _day BETWEEN last_enddate AND (r.startDate) THEN 
                                      -- removed "- 7 ", that is covered above
        RETURN 'Violates condition 3';
    END IF;

    last_enddate := r.enddate; -- remember for next iteration
END LOOP;

RETURN NULL;

END;
$BODY$ LANGUAGE plpgsql;

Więcej wskazówek

  • Dlaczego alias dla $1 ? Nazwałeś go _day już w deklaracji. Trzymaj się tego.
  • Pamiętaj, aby wiedzieć, jak PostgreSQL obsługuje wielkość liter w identyfikatorach . (Używam tylko małych liter.)
  • Możesz po prostu dodać/odjąć liczby całkowite (dla dni) od daty.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie Postgres jest bardzo wolne z current_date::date zamiast zakodowanej na stałe daty

  2. Dzienniki JBoss Sterownik Postgres nie jest zgodny ze standardem JDBC

  3. Wysyłasz tablicę wartości do zapytania sql w ruby?

  4. Railsy, ​​jaka jest różnica w unikalnym indeksie i validates_uniqueness_of

  5. postgresql:typ danych dla skrótu wiadomości md5?