sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan opsummerer man alle rækker baseret på en opregningskolonne i PostgreSQL part2?

For at ekskludere fra beregningsrækkerne tidligere end sidste Total du kan bruge den primære nøgle i en tilbehørsforespørgsel. Deklarer ny variabel v_fnserial .Find en fnserial af rækken med sidste forekomst af 'Total' for givet pcnum og fnname og tildel værdien til v_fnserial . I hovedforespørgslen tilføj en betingelse fnserial > v_fnserial .

Du bør oprette en undtagelse, når hovedforespørgslen returnerer 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. Hvordan beregner jeg arealet af en polygon i en MySQL-database, når polygonens punkter er Lat Longs?

  2. Slet fra mange til mange forhold i MySQL

  3. Postgresql lagret procedure returnerer tabel alle kolonner

  4. Hvordan man konverterer heltal til streng og får længden af ​​strengen