Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

एसक्यूएल - अधूरा संयोजन

तालिका और नमूना तिथि बनाएं

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.

और फिर KEEP . का उपयोग करें MAX . पर क्लॉज ORDER BY . के साथ समग्र फ़ंक्शन जो पंक्तियों को अंत में NULL टिप्पणियों के साथ रखता है। ORDER BY . में आप जिस भी तारीख का उपयोग करते हैं तालिका में जल्द से जल्द वास्तविक अवलोकन से पहले होना चाहिए।

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

मुझे संदेह है कि CASE . जोड़ने की तुलना में NULL मानों को अनदेखा करने के लिए एक और अधिक सुरुचिपूर्ण समाधान है ORDER BY . को कथन लेकिन CASE काम हो जाता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PLSQL में एकल उद्धरण से बचना

  2. उल्लंघन - मूल कुंजी नहीं मिली 02291. 00000 - अखंडता बाधा

  3. खंड बनाम या खंड में प्रदर्शन के अनुसार

  4. Oracle PLSQL फ़ंक्शन दूसरे फ़ंक्शन में कॉल करता है

  5. SQL सर्वर रिपोर्टिंग सेवाओं में Oracle दिनांक प्रारूप अपवाद