2

OracleSQLで請求書データを処理しています。指定された請求日までのアカウントの請求額の中央値を与える変数「現在までのアカウント請求額の中央値」を作成したいと思います。

4

2 に答える 2

2

Oracleには実際にmedian機能があります。毎日のすべてのアカウントの中央値を見つけるには:

select  median(amount)
from    invoices

または、1日あたりのアカウントあたりの中央値を表示するには:

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 に答える