PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL memeriksa elemen catatan sebelumnya


Tidak bekerja seperti yang Anda miliki. Fungsi jendela tidak bisa disebut seperti itu. Variabel catatan Anda r seperti kursor bawaan dalam FOR lingkaran. Hanya baris hasil saat ini yang terlihat di dalam loop. Anda harus mengintegrasikan fungsi jendela lag() ke dalam SELECT initial awal .

Namun karena Anda tetap mengulang baris dalam urutan yang cocok, Anda dapat melakukannya dengan cara lain.

Pertimbangkan contoh yang sebagian besar ditulis ulang ini. Mengembalikan pada baris pertama yang melanggar:

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;

Petunjuk lainnya

  • Mengapa alias untuk $1 ? Anda menamakannya _day dalam deklarasi sudah. Tetap berpegang pada itu.
  • Pastikan untuk mengetahui bagaimana PostgreSQL menangani kasus dalam pengidentifikasi . (Saya hanya menggunakan huruf kecil.)
  • Anda cukup menambah / mengurangi bilangan bulat (untuk hari) dari tanggal.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Array TypeORM tidak didukung di postgres?

  2. Pembaruan alat pengujian PostgreSQL dengan arsip benchmark

  3. Bagaimana saya bisa membuat jenis kolom khusus dengan Typesafe Slick di Scala?

  4. Batasan pemeriksaan PostgreSQL untuk kondisi kunci asing

  5. Fungsi Tanggal &Waktu PostgreSQL