sql >> Database teknologi >  >> RDS >> Oracle

SQL - Ufuldstændig kombination

Opret tabellen og prøvedatoen

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.

Og brug derefter KEEP klausul på MAX aggregeringsfunktion med en ORDER BY der sætter rækkerne med NULL-observationer til sidst. uanset hvilken dato du bruger i ORDER BY skal være tidligere end den tidligste reelle observation 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

Jeg formoder, at der er en mere elegant løsning til at ignorere NULL-værdierne end at tilføje CASE erklæring til ORDER BY men CASE får arbejdet gjort.



  1. Intelligent MySQL GROUP BY til aktivitetsstreams

  2. Sådan viser du tabeller i den aktuelle database ved hjælp af PostgreSQL

  3. Bruger MySQL væsentligt flere ressourcer sammenlignet med andre DBMS?

  4. Hvordan læser man en fil og tilføjer dens indhold til databasen?