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

SQL - Menggabungkan tidak lengkap

Buat tabel dan tanggal sampel

SQL> create table observation(
  2    item_id number,
  3    dt      date,
  4    val1    number,
  5    val2    number );

Table created.

SQL> insert into observation values( 1, date '2011-12-01', 1, null );

1 row created.

SQL> insert into observation values( 1, date '2011-12-02', null, 2 );

1 row created.

SQL> insert into observation values( 1, date '2011-12-03', 3, null );

1 row created.

SQL> insert into observation values( 2, date '2011-12-01', 4, null );

1 row created.

SQL> insert into observation values( 2, date '2011-12-02', 5, 6 );

1 row created.

Dan kemudian gunakan KEEP klausa pada MAX fungsi agregat dengan ORDER BY yang menempatkan baris dengan pengamatan NULL di akhir. tanggal berapa pun yang Anda gunakan di ORDER BY harus lebih awal dari pengamatan nyata paling awal dalam tabel.

SQL> ed
Wrote file afiedt.buf

  1  select item_id,
  2         max(val1) keep( dense_rank last
  3                              order by (case when val1 is not null
  4                                             then dt
  5                                             else date '1900-01-01'
  6                                          end) ) val1,
  7         max(val2) keep( dense_rank last
  8                              order by (case when val2 is not null
  9                                             then dt
 10                                             else date '1900-01-01'
 11                                          end) ) val2
 12    from observation
 13*  group by item_id
SQL> /

   ITEM_ID       VAL1       VAL2
---------- ---------- ----------
         1          3          2
         2          5          6

Saya menduga ada solusi yang lebih elegan untuk mengabaikan nilai NULL daripada menambahkan CASE pernyataan ke ORDER BY tapi CASE menyelesaikan pekerjaan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01219:basis data tidak terbuka:kueri diizinkan hanya pada tabel/tampilan tetap

  2. Cara memanggil prosedur tanpa parameter sebagai tipe tabel dari kelas Java

  3. Apa itu Urutan di oracle

  4. Oracle self join dimulai dengan nilai minimum (yearmonths) untuk setiap partisi

  5. ORA-21700:objek tidak ada atau ditandai untuk dihapus untuk Associative Array sebagai parameter input yang dipanggil dari ODP.NET