sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLパート2の列挙列に基づいてすべての行を合計するにはどうすればよいですか?

    最後のTotalより前の計算行から除外するには アクセサリクエリで主キーを使用できます。新しい変数v_fnserialを宣言します。 。fnserialを検索します 指定されたpcnumの「Total」が最後に発生した行の および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. MySQLテーブルでのvarcharの長さの重要性

    2. 作成済みのデータベースをアセットからコピーできません

    3. SQLでカンマ区切りの値を比較する

    4. MySQLdbを介して関数を作成する