我正在使用 Oracle SQL 中的发票数据。我想创建一个变量“迄今为止的中位数帐户发票金额”,它给出了截至给定发票日期的帐户的中位数发票金额。
问问题
1637 次
2 回答
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
于 2011-08-28T09:18:51.767 回答
0
据我了解,这就是你所追求的。@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
于 2011-08-28T18:35:26.167 回答