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

Bagaimana cara meringkas semua baris berdasarkan kolom enumerasi di PostgreSQL part2?

Untuk mengecualikan dari baris perhitungan lebih awal dari Total terakhir Anda dapat menggunakan kunci utama dalam kueri aksesori. Deklarasikan variabel baru v_fnserial .Temukan fnserial dari baris dengan kemunculan 'Total' terakhir untuk pcnum given dan fnname dan tetapkan nilainya ke v_fnserial .Dalam kueri utama tambahkan kondisi fnserial > v_fnserial .

Anda harus memunculkan pengecualian ketika kueri utama mengembalikan null .

IF NEW.timetype = 'Total' THEN
    SELECT fnserial INTO v_fnserial
    FROM mytable 
    WHERE timetype = 'Total' AND pcnum = NEW.pcnum AND fnname = NEW.fnname
    ORDER BY fnserial DESC LIMIT 1;

    SELECT SUM(timeelapse) FROM (
        SELECT DISTINCT ON (floor(timeindex)::int) floor(timeindex)::int timeindex, timeelapse 
        FROM mytable 
        WHERE fnserial > coalesce(v_fnserial, 0) AND pcnum = NEW.pcnum AND fnname = NEW.fnname AND timetype = 'Lap' 
        ORDER BY 1, 2 DESC) alias 
    INTO v_sumtimeelapse_fn;
    IF v_sumtimeelapse_fn NOTNULL THEN
        NEW.timeelapse := v_sumtimeelapse_fn;
    ELSE
        RAISE EXCEPTION USING MESSAGE = 'There is not any previous row...';
    END IF;
END IF;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan saat mendorong data ke Heroku:perpindahan zona waktu di luar jangkauan

  2. Bagaimana cara meningkatkan otomatis di PostgreSQL?

  3. Fungsi PostgreSQL age():hasil yang berbeda/tidak terduga saat mendarat di bulan yang berbeda

  4. SQLAlchemy (psycopg2.ProgrammingError) tidak dapat mengadaptasi tipe 'dict'

  5. Postgresql :kesalahan sintaks pada atau dekat -