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

Jak zsumować wszystkie wiersze na podstawie kolumny enumeracyjnej w PostgreSQL part2?

Aby wykluczyć z obliczeń wiersze wcześniejsze niż ostatni Total możesz użyć klucza podstawowego w zapytaniu o akcesoria.Zadeklaruj nową zmienną v_fnserial .Znajdź fnserial wiersza z ostatnim wystąpieniem 'Total' dla podanego pcnum i fnname i przypisz wartość do v_fnserial .W głównym zapytaniu dodaj warunek fnserial > v_fnserial .

Powinieneś zgłosić wyjątek, gdy główne zapytanie zwraca 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. Konwertuj hstore postgresql na tablicę php

  2. Używanie narzędzi hibernacji do inżynierii wstecznej pojo z Postgres

  3. Czy rozszerzenie języka JavaScript plv8 może wywoływać biblioteki innych firm?

  4. postgresql libpqxx Kilka zapytań jako jedna transakcja

  5. Wstawianie do niestandardowych typów SQL za pomocą przygotowanych instrukcji w java