如何使用Oracle SQL计算中值到期变量?

时间:2011-08-28 09:16:06

标签: sql oracle time-series analytic-functions

我正在使用Oracle SQL中的发票数据。我想创建一个变量“迄今为止的中位数帐户发票金额”,它给出了帐户的中位发票金额,直到该给定的发票日期。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

据我所知,这就是你所追求的。 @Andomar,因为Median是一系列数字的中间位置,因此对这个系列进行排序对结果没有任何影响。最高和最低之间的中间数字不能改变......

因此,按数据和帐户划分的中位数为:

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