Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

SQL Challenge/Puzzle:Diberikan jejak tumpukan - Bagaimana menemukan elemen teratas di setiap titik waktu?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa menggunakan klausa JOIN versus kondisi WHERE?

  2. Oracle REGEXP_SUBSTR | Ambil string di antara dua pembatas

  3. mengekspor database Oracle (membuat file data .sql)

  4. Apakah xmlparserv2 dari com.Oracle.jdbc:ojdbc8 (v12.2.0.1) tiba-tiba rusak?

  5. Bagaimana cara melewati datatable sebagai input ke prosedur di C #?