我如何使用Oracle SQL计算中间日期变量



我在Oracle SQL中使用发票数据。我想创建一个变量,"截至日期的中位数帐户发票金额",它给出截至给定发票日期的帐户的中位数发票金额。

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

据我所知,这就是你想要的。@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

相关内容

  • 没有找到相关文章

最新更新