पिछली Total
. से पहले की गणना पंक्तियों से बाहर करने के लिए आप एक्सेसरी क्वेरी में प्राथमिक कुंजी का उपयोग कर सकते हैं। नया चर घोषित करें v_fnserial
.एक fnserial
खोजें दिए गए pcnum
. के लिए 'कुल' के अंतिम अवसर वाली पंक्ति का और fnname
और मान असाइन करें v_fnserial
मुख्य क्वेरी में एक शर्त जोड़ें fnserial > v_fnserial
.
मुख्य क्वेरी null
returns आने पर आपको एक अपवाद उठाना चाहिए ।
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;