sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur summerar man alla rader baserat på en uppräkningskolumn i PostgreSQL part2?

För att exkludera från beräkningsraderna tidigare än senaste Total du kan använda primärnyckeln i en tillbehörsfråga. Deklarera ny variabel v_fnserial .Hitta en fnserial av raden med den senaste förekomsten av 'Total' för given pcnum och fnname och tilldela värdet till v_fnserial . I huvudfrågan lägg till ett villkor fnserial > v_fnserial .

Du bör göra ett undantag när huvudfrågan returnerar 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. Vad är skillnaden mellan count(0), count(1) och count(*) i mySQL/SQL?

  2. Error sql:Konverteringen av en varchar-datatyp till en datetime-datatyp resulterade i ett värde utanför intervallet

  3. Mysql inom avståndsfråga

  4. Använder strtotime för datum före 1970