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