Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

SQL - Kết hợp không đầy đủ

Tạo bảng và ngày lấy mẫu

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.

Và sau đó sử dụng KEEP mệnh đề trên MAX hàm tổng hợp với ORDER BY đặt các hàng có NULL quan sát ở cuối. bất kỳ ngày nào bạn sử dụng trong ORDER BY cần sớm hơn lần quan sát thực tế sớm nhất trong bảng.

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

Tôi nghi ngờ rằng có một giải pháp thanh lịch hơn để bỏ qua các giá trị NULL hơn là thêm CASE câu lệnh cho ORDER BY nhưng CASE hoàn thành công việc.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xử lý ngoại lệ ORACLE

  2. NLS_INITCAP () Hàm trong Oracle

  3. Cách viết một thủ tục PL / SQL với tham số đầu vào x và đầu vào / đầu vào của tham số x được kết hợp

  4. Sự khác biệt giữa độ chính xác và tỷ lệ là gì?

  5. Sự tự mãn dẫn đến:Rủi ro trở thành hiện thực