sql >> Databáze >  >> RDS >> PostgreSQL

Jak shrnout všechny řádky na základě sloupce výčtu v PostgreSQL part2?

Chcete-li vyloučit z výpočtu řádky dříve než poslední Total primární klíč můžete použít v doplňkovém dotazu. Deklarujte novou proměnnou v_fnserial .Najděte fnserial řádku s posledním výskytem 'Total' pro daný pcnum a fnname a přiřaďte hodnotu v_fnserial .Do hlavního dotazu přidejte podmínku fnserial > v_fnserial .

Měli byste vyvolat výjimku, když hlavní dotaz vrátí 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. Jak omezit řádky na to, kde se SUM sloupce rovná určité hodnotě v Oracle

  2. Jak uniknout řetězcům v SQL Server pomocí PHP?

  3. Chyba zaokrouhlování serveru SQL Server, zadání různých hodnot

  4. Problém s odečítáním data v Oracle