Как вычислить срединную переменную с использованием Oracle SQL? - PullRequest
2 голосов
/ 28 августа 2011

Я работаю с данными счетов в Oracle SQL.Я хочу создать переменную «Средняя сумма счета на дату», которая будет представлять среднюю сумму счета для учетной записи до указанной даты счета.

Ответы [ 2 ]

2 голосов
/ 28 августа 2011

Oracle фактически имеет функцию median. Чтобы найти медиану всех счетов за каждый день:

select  median(amount)
from    invoices

Или показать медиану для аккаунта в день:

select  AccountNr
,       to_char(InvoiceDate, 'yyyymmdd')
,       median(amount)
from    invoices
group by
        AccountNr
,       to_char(InvoiceDate, 'yyyymmdd')

Или показать «бегущую медиану»:

select  i1.custID
,       i1.inv_date
,       median(i2.amount)
from    invoices i1
join    invoices i2
on      i2.custId = i1.custID
        and i2.inv_date <= i1.inv_date
group by
        i1.custID
,       i1.inv_date
0 голосов
/ 28 августа 2011

Из того, что я понимаю, это то, что вы ищете. @ Andomar, так как Медиана - середина в ряду чисел, упорядочивающих этот ряд, не имеет значения для результата. Среднее число между самым высоким и самым низким не может измениться ...

Итак, медиана по данным и счету будет:

select acc_no, median(amount) over ( partition by acc_no, to_char(invoice_date,'yyyymmdd'))
  from invoices
       -- if applicable
 where invoice_date < :date

Медиана по счету будет

select acc_no, median(amount) over ( partition by acc_no )
 from invoices
where invoice_date < :date
...