Ini adalah teka-teki yang bagus.
Karena DBMS utama saya adalah Teradata, saya menulis solusi untuknya menggunakan fungsi Analytical (membutuhkan 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;
Solusi ini juga berfungsi untuk Oracle, tetapi PostgreSQL &SQL Server tidak mendukung IGNORE NULLS
opsi untuk LAST_VALUE
dan menirunya cukup rumit, misalnya lihat Itzk Ben-Gan's The Last non NULL Teka-teki
Sunting:Sebenarnya tidak terlalu rumit, saya lupa solusi ke-2 Itzik, trik dukung-dukungan lama;-)
Pendekatan Martin Smith akan berhasil untuk keempat DBMS.