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

Memprediksi data deret waktu di Oracle/SQL

Anda dapat membuat perkiraan sederhana menggunakan REGR fungsi regresi linier.

--Ordinary least squares forecast for each customer for the next year.
select
    cust_id,
    max(year) +1 forecast_year,
    -- y = mx+b
    regr_slope(revenue, year)
        * (max(year) + 1)
        + regr_intercept(revenue, year) forecasted_revenue
from customer_data
group by cust_id;

CUST_ID   FORECAST_YEAR   FORECASTED_REVENUE
-------   -------------   ------------------
1                  2018               730868
2                  2018                50148
4                  2018                 7483
3                  2018                -9920

Di bawah ini adalah contoh skema. Atau Anda dapat menggunakan SQLFiddle ini .

create table customer_data
(
    cust_id number,
    year number,
    revenue number
);

insert into customer_data
select 1, 2016, 679862 from dual union all
select 1, 2017, 705365 from dual union all
select 2, 2016, 51074  from dual union all
select 2, 2017, 50611  from dual union all
select 3, 2016, 190706 from dual union all
select 3, 2017, 90393  from dual union all
select 4, 2016, 31649  from dual union all
select 4, 2017, 19566  from dual;

REGR fungsi berurusan dengan pasangan angka, tidak memahami aturan bisnis seperti "pendapatan tidak boleh di bawah 0". Jika Anda ingin membatasi prakiraan agar selalu tetap pada atau di atas 0, CASE ekspresi mungkin membantu:

--Forecasted revenue, with minimum forecast of 0.
select cust_id, forecast_year,
    case when forecasted_revenue < 0 then 0 else forecasted_revenue end forecasted_revenue
from
(
    --Ordinary least squares forecast for each customer for the next year.
    select
        cust_id,
        max(year) +1 forecast_year,
        -- y = mx+b
        regr_slope(revenue, year)
            * (max(year) + 1)
            + regr_intercept(revenue, year) forecasted_revenue
    from customer_data
    group by cust_id
);

CUST_ID   FORECAST_YEAR   FORECASTED_REVENUE
-------   -------------   ------------------
1                  2018               730868
2                  2018                50148
4                  2018                 7483
3                  2018                    0



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pernyataan Oracle Sql di java

  2. Masukkan gumpalan di database Oracle dengan C #

  3. Apa perbedaan antara variabel ikat dan variabel substitusi (yang saya masukkan menggunakan &&)?

  4. Oracle - Dalam pertanyaan CLAUSE saat menggunakan dengan banyak nilai, menjadikannya dinamis

  5. Apakah ada cara, di ORACLE, untuk menggabungkan beberapa baris baris menjadi satu, menggunakan dua tabel, di mana nilai akhir dipisahkan dengan koma?