SQL Oracle/聚合查询
我正试图在Oracle上运行一个查询。我有一个账户的已结算付款表,我有一个查询,可以查询最后三个已结算金额,加上我需要这些信息的任何账户的任何已注销金额 然而,一些账户是以每周为基础的,对于这些账户,我想将它们的每周结算汇总到它们的每月组中。以下是我目前掌握的代码:SQL Oracle/聚合查询,sql,oracle,Sql,Oracle,我正试图在Oracle上运行一个查询。我有一个账户的已结算付款表,我有一个查询,可以查询最后三个已结算金额,加上我需要这些信息的任何账户的任何已注销金额 然而,一些账户是以每周为基础的,对于这些账户,我想将它们的每周结算汇总到它们的每月组中。以下是我目前掌握的代码: SELECT * FROM ( SELECT * FROM ( SELECT gwod.account_id, gwod.char
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.*
这一点非常有效,但对于每周结算的账户而言,因此,我希望完成9月、8月和7月的合计付款,而不是完成已结算的最后三个每周金额,即2017年9月25日、2017年9月18日、2017年9月11日
我希望所有这些都有意义。只需使用内部查询中的SELECT和GROUP BY以及PARTITION和PIVOT子句将聚合从当前单位级别(即每周级别)更改为月份级别: 随机数据演示:
我在Oracle中没有看到月函数,您在哪里找到的?Oracle数据库中没有月函数。您发布的链接是针对JAVADB的。我不需要尝试提取…,我知道它会起作用-这是在Oracle中进行提取的正确方法。还有-我要测试的表是什么意思?我不是OP@mathguy。。。我添加了一个带有月号和名称的解决方案演示。
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.*