2017-10-12 134 views
2

我試圖在Oracle上運行查詢。我有一個帳戶結算付款表,我有一個查詢,可以查看最後三筆結算金額,以及任何已註銷的金額,用於我需要此信息的任何帳戶。SQL Oracle /聚合查詢

但是,一些帳戶是以每週爲基礎的,對於這些帳戶,我想將他們的每週結算彙總到他們的月度小組中。這裏是我的代碼至今:

SELECT * 
FROM  (
    SELECT * 
    FROM (
      SELECT gwod.account_id, 
        gwod.charge_period_start, 
        SUM(gwod.total_due_on_charge) total_due_on_charge, 
        SUM(gwod.amount_written_off) amount_written_off, 
        DENSE_RANK() over (PARTITION BY gwod.account_id 
             ORDER BY charge_period_start DESC) rownumber 
      FROM  report.accounts_write_off gwod 
      WHERE account_id IN (‘account_number’) 
      GROUP BY gwod.account_id, 
        gwod.charge_period_start 
      HAVING SUM (gwod.total_due_on_charge) <> 0) t1 
    WHERE t1.rownumber <=3) 
    PIVOT (MAX(charge_period_start) charge_period, 
      MAX(total_due_on_charge) total_due_on_charge, 
      MAX(amount_written_off) amount_written_off 
      FOR rownumber IN (1,2,3)) 
ORDER BY account_id.* 

這工作完全但每週根據賬戶,因此而不是通過過去三年每週量來進行結算拉動,即25-09-17,18-09 -17,2017年9月9日,我想通過9月,8月和7月的總計付款。

我希望這一切都有道理。

回答

0

只需將聚集來自當前單元的水平(即,每週)給月水平EXTRACT(month ...)在內部查詢的SELECTGROUP BY以及PARTITIONPIVOT條款修改:

SELECT * 
FROM  (
    SELECT * 
    FROM (
      SELECT gwod.account_id, 
        EXTRACT(month FROM gwod.charge_period_start) charge_period_month, 
        SUM(gwod.total_due_on_charge) total_due_on_charge, 
        SUM(gwod.amount_written_off) amount_written_off, 
        DENSE_RANK() over (PARTITION BY gwod.account_id 
             ORDER BY EXTRACT(month FROM gwod.charge_period_start) DESC) rownumber 
      FROM  report.accounts_write_off gwod 
      WHERE account_id IN ('account_number') 
      GROUP BY gwod.account_id, 
        EXTRACT(month FROM gwod.charge_period_start) 
      HAVING SUM (gwod.total_due_on_charge) <> 0) t1 
    WHERE t1.rownumber <=3) 
    PIVOT (MAX(charge_period_month) charge_period, 
      MAX(total_due_on_charge) total_due_on_charge, 
      MAX(amount_written_off) amount_written_off 
      FOR rownumber IN (1,2,3)) 
ORDER BY account_id.* 

DEMO(隨機數據)

http://rextester.com/UJK84858

+0

我公頃在Oracle中沒有看到MONTH()函數,您在哪裏找到它? – mathguy

+0

Oracle數據庫中沒有MONTH()函數。您發佈的鏈接是用於JAVADB的。我不需要嘗試EXTRACT(...),我知道它會起作用 - 這是在Oracle中執行此操作的正確方法。 – mathguy

+0

另外 - 你的意思是「我的」表測試?我不是OP。 – mathguy