Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Tidak mendapatkan perkalian seri penuh (produk) dalam permintaan CONNECT-BY

Yang Anda butuhkan adalah perkalian kumulatif. Tetapi tidak ada fungsi seperti fungsi Agregat atau Analitik. Tetapi matematika memberi tahu kita bahwa perkalian dapat diubah menjadi penjumlahan menggunakan logaritma .

a * b =  exp(ln(a) + ln(b))

Gunakan ini di SUM sebagai fungsi analitik. Tidak perlu menggunakan konstruk CONNECT BY.

SQL Fiddle

recurreten as
(
select  YR, YSet, 
      rtnpct rtn_year, 
      round(exp(sum(ln(rtnpct)) over (order by yr, yset rows between unbounded preceding and current row)),2) ccr,
      exp(sum(ln(rtnpct)) over (order by yr, yset rows between unbounded preceding and current row)) ccrfull
from Z_RETENTIONPCT
)
select * from recurreten
order by yr, yset

Hasil :

|   YR | YSET | RTN_YEAR |  CCR |        CCRFULL |
|------|------|----------|------|----------------|
| 1998 |   20 |  0.84766 | 0.85 |        0.84766 |
| 1999 |   21 |  0.77941 | 0.66 |   0.6606746806 |
| 2000 |   22 |  0.78659 | 0.52 | 0.519680097013 |
| 2001 |   23 |  0.76879 |  0.4 | 0.399524861783 |
| 2002 |   24 |  0.80952 | 0.32 |  0.32342336611 |
| 2003 |   25 |  0.76316 | 0.25 | 0.246823776081 |
| 2004 |   26 |  0.82425 |  0.2 | 0.203444497435 |
| 2005 |   27 |   0.6992 | 0.14 | 0.142248392606 |
| 2006 |   28 |  0.77071 | 0.11 | 0.109632258666 |
| 2007 |   29 |    0.702 | 0.08 | 0.076961845583 |



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Panggil fungsi paket Oracle menggunakan Odbc dari C #

  2. Bagaimana Anda mendapatkan nilai berikutnya dalam urutan ke dalam variabel?

  3. Karakter non-numerik ditemukan di mana numerik diharapkan

  4. Skrip SQL*Plus dieksekusi dua kali

  5. Oracle membandingkan dua tanggal yang berbeda