sql >> Databasteknik >  >> RDS >> Oracle

SQL - Kombinera ofullständig

Skapa tabellen och exempeldatumet

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.

Och använd sedan KEEP sats på MAX samla funktion med en ORDER BY som sätter raderna med NULL-observationer i slutet. vilket datum du än använder i ORDER BY måste vara tidigare än den tidigaste verkliga observationen i tabellen.

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

Jag misstänker att det finns en mer elegant lösning för att ignorera NULL-värdena än att lägga till CASE uttalande till ORDER BY men CASE får jobbet gjort.



  1. SubSonic genererar inte MySql främmande nyckeltabeller

  2. Skillnaden mellan Select Unique och Select Distinct

  3. ekobild enligt ett tillstånd

  4. Hur renderar ett träd i html + php(codeIgniter)