Das ist ein schönes Rätsel.
Da mein Haupt-DBMS Teradata ist, habe ich eine Lösung dafür mit analytischen Funktionen geschrieben (benötigt TD14.10+):
SELECT dt.*,
-- find the last item in the stack with the same position
Last_Value(val IGNORE NULLS)
Over (PARTITION BY pos
ORDER BY i) AS top_of_stack_val
FROM
(
SELECT st.*,
-- calculate the number of items in the stack
Sum(CASE WHEN op = 'I' THEN 1 ELSE -1 end)
Over (ORDER BY i
ROWS Unbounded Preceding) AS pos
FROM stack_trace AS st
) AS dt;
Diese Lösung funktioniert auch für Oracle, aber PostgreSQL und SQL Server unterstützen die IGNORE NULLS
nicht Option für LAST_VALUE
und es zu emulieren ist ziemlich kompliziert, siehe z. B. Itzk Ben-Gans The Last non NULL Rätsel
Edit:Eigentlich ist es nicht so komplex, ich habe Itziks 2. Lösung vergessen, den alten Huckepack-Trick;-)
Der Ansatz von Martin Smith funktioniert für alle vier DBMS.