优化订单年度收支差额查询(兼容DB2/Oracle11g及HibernateQL)
信贷流水查询优化求助
嗨,我现在有个信贷流水表的查询需求,想请教下能不能优化现有SQL提升性能,具体情况如下:
表结构
我的信贷流水表accountactivity结构和数据如下:
| id | orderno | due | bookingdate | movementtype |
|---|---|---|---|---|
| 1 | o11 | 30.50 | 10.01.2017 | CREDIT |
| 2 | o22 | 50.99 | 11.01.2017 | DEBIT |
| 3 | o11 | 20.40 | 12.01.2017 | DEBIT |
| 4 | o22 | 77.88 | 13.01.2017 | CREDIT |
| 5 | o11 | 05.20 | 14.01.2017 | DEBIT |
查询需求
我需要查询指定订单号和年份下,CREDIT总额减去DEBIT总额的差额。比如当传入orderno=o11、年份是2017时,预期结果是4.9(计算逻辑:30.50 - (20.40+5.20) = 4.9)。
现有实现
目前我用了两个子查询来实现这个逻辑,SQL语句如下:
SELECT (credit - debit) AS total FROM ( SELECT COALESCE(SUM(due), 0.0) AS credit FROM accountactivity WHERE orderno = :ordernoParam AND YEAR(bookingdate) = :bookingParam AND movementtype = 'CREDIT' ), ( SELECT COALESCE(SUM(due), 0.0) AS debit FROM accountactivity WHERE orderno = :ordernoParam AND YEAR(bookingdate) = :bookingParam AND movementtype = 'DEBIT' )
想请教的问题
能不能优化这个查询,去掉子查询来提升性能?要求必须兼容DB2和Oracle 11g,优先考虑用HibernateQL,原生SQL也可以接受。
内容的提问来源于stack exchange,提问作者Quoting Eddie
相关产品推荐
相关产品推荐

