Oracle
 sql >> база данни >  >> RDS >> Oracle

SQL - Непълно комбиниране

Създайте таблицата и примерната дата

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

Подозирам, че има по-елегантно решение за игнориране на NULL стойностите от добавянето на CASE израз към 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. Създаване на клъстериран индекс в Oracle с помощта на IOT? объркване

  2. Може ли %type да се използва с тип обект? Възможно ли е, защото получавам грешка, докато се опитвам да го направя

  3. Как записите с фиксирана дължина и полетата с фиксирана дължина увеличават производителността на базата данни?

  4. Грешка в Oracle .Net ManagedDataAccess:Не можа да се зареди тип 'OracleInternal.Common.ConfigBaseClass' от сборка

  5. Грешка при зареждането на oci8.so с Ubuntu сървър 17.04 php 7 и apache2