PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да обобщим всички редове въз основа на колона за изброяване в PostgreSQL part2?

За да изключите от изчислението редове, по-ранни от последния Total можете да използвате първичния ключ в допълнителна заявка. Декларирайте нова променлива v_fnserial .Намерете fnserial от реда с последно срещане на „Общо“ за даден pcnum и fnname и присвоете стойността на v_fnserial .В основната заявка добавете условие fnserial > v_fnserial .

Трябва да предизвикате изключение, когато основната заявка върне 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. Прикачете дял LIST към съществуваща таблица в postgres 11

  2. Как да конфигурирате репликация от клъстер към клъстер за PostgreSQL

  3. Запазете само последните 5 резултата от търсене на потребител в таблица

  4. Преобразуване на DateTime в NHibernate Postgresql

  5. Как да махна PostgreSQL база данни, ако има активни връзки към нея?