Oracle
 sql >> Baza danych >  >> RDS >> Oracle

SQL - Łączenie niekompletne

Utwórz tabelę i przykładową datę

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.

A następnie użyj KEEP klauzula na MAX funkcja agregująca z ORDER BY to umieszcza na końcu wiersze z obserwacjami NULL. niezależnie od daty użytej w ORDER BY musi być wcześniejsza niż najwcześniejsza rzeczywista obserwacja w tabeli.

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

Podejrzewam, że istnieje bardziej eleganckie rozwiązanie, aby zignorować wartości NULL niż dodanie CASE oświadczenie do ORDER BY ale CASE wykonuje swoją pracę.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. WHERE_IN zapytanie z kluczem złożonym?

  2. Wybierz dla pominięcia aktualizacji zablokowane z poziomu JPA

  3. Utwórz funkcję pl/sql i znajdź lata przestępne

  4. problem z hibernacją oracle10g

  5. Eksportuj i pobieraj wyniki zapytań do pliku Excel w PHP z Oracle