--查询某日期区间,未退款且已支付成功的支付记录
SELECT service_order,sum(PAYMENT_AMOUNT) FROM PAYMENT A1 WHERE EXISTS(
SELECT order_id FROM ctoc_order A2 WHERE 1=1
and A2.order_id=A1.service_order
AND (Order_Status =1 OR Order_Status=2)
AND trunc(ORDER_CREATE_TIME) between to_date('2012-05-01','yyyy-MM-dd') and to_date('2012-06-01','yyyy-MM-dd')
)
and payment_status=0
group by service_order
having sum(PAYMENT_AMOUNT)>0订单表:ctoc_order
id:order_id
状态:Order_Status支付表:PAYMENT
订单表外键;service_order
金额:PAYMENT_AMOUNT--求加速,求优化```
解决方案 »
- select 1 from是什么意思?
- clob转换blob的问题,请大家帮忙看看
- Oracle数据库怎么样比较两个表的数据是否一样
- SQL优化一下。。。
- 如何在Oracle中取得,用java写的存储过程返回的数组
- hql 语句中的in 中有4000多个元素怎么解决?
- 一个基础问题
- 使用PL/SQL develpor 将oracle中的表结构导出为XML文件
- oracle如何在主域控制器上安装
- 朋友们有懂ACCESS的吗?有没有类似ORACLE的ROWNUM的东西? 请到ACCESS论坛取分,和这里的分数是通的。我的朋友请帮我up一下,谢谢了。
- 请教oracle client安装问题
- WMSYS.WM_CONCAT()函数无法使用,提示标识符无效。
SELECT order_id FROM ctoc_order A2 WHERE 1=1
and A2.order_id=A1.service_order
AND (Order_Status =1 OR Order_Status=2)
AND trunc(ORDER_CREATE_TIME) between to_date('2012-05-01','yyyy-MM-dd') and to_date('2012-06-01','yyyy-MM-dd')
)
and payment_status=0
group by service_order
having sum(PAYMENT_AMOUNT)>0既然你过滤了sum(PAYMENT_AMOUNT)>0
是不是开始panment_amount>0的条件就可以写在where那里呢,而不是group by后判断
2.你的date应该可以直接比较吧,不使用trunc,例如数据库中日期 ’2012-1-2 01:01:20‘ 判断它是否在1月付款、退款,不用做时间处理的。
SELECT /*+USE_CONCAT*/ service_order,sum(PAYMENT_AMOUNT) FROM PAYMENT A1 WHERE EXISTS(
SELECT order_id FROM ctoc_order A2 WHERE 1=1
and A2.order_id=A1.service_order
AND (Order_Status =1 OR Order_Status=2)
AND trunc(ORDER_CREATE_TIME) between to_date('2012-05-01','yyyy-MM-dd') and to_date('2012-06-01','yyyy-MM-dd')
)
and payment_status=0
group by service_order
having sum(PAYMENT_AMOUNT)>0