我有一个小的查询,我需要做一些简单的计算;但是,这需要永远完成。在更大的数据上,我曾经使用过类似的查询,而在性能方面则更好。我曾尝试对源表进行排序,但同样的情况是我的ETL每秒移动2行...以下是我的查询(关于调优的任何建议都值得欢迎)
SELECT
t1.APPID,
t1.APP_INS_ID,
t1.APP_INS_ID_DUE_DTAE,
TRUNC(LAST_DAY(ADD_MONTHS(t1.APP_INS_ID_DUE_DTAE, -1))) +1 AS EndDateOfPaymentMOnth,
t1.APP_INS_ID_PAYMENT_DATE,
t1.ispaid,
(SELECT COUNT(APP_INS_ID)
FROM tbl1 t2
WHERE t1.APPID = t2.APPID
AND t2.APP_INS_ID <= t1.APP_INS_ID
AND T2.Is_due = 1
AND ispaid = 'Y'
AND TRUNC(APP_INS_ID_PAYMENT_DATE) <= TRUNC(LAST_DAY(ADD_MONTHS(t1.APP_INS_ID_DUE_DTAE, -1))) + 1) AS TOTAL_PAID
FROM
tbl1 t1
WHERE
t1.is_due = 1
AND t1.APP_INS_ID_DUE_DTAE < TRUNC((SYSDATE - (EXTRACT(DAY FROM SYSDATE)) + 1))
基本上,我正在尝试计算在到期付款日之前已支付多少分期付款。
非常感谢您的帮助!
以下是具有预期输出的简单数据:
APPID APP_INS_ID APP_INS_ID_DUE_DTAE EndDateOfPaymentMOnth
APP_INS_ID_PAYMENT_DATE ispaid TOTAL_PAID
1| 1| 1-Aug-14| 1-Aug-14| 2-Oct-14| Y| 0|
1| 2| 1-Sep-14| 1-Sep-14| 2-Oct-14| Y| 0|
1| 3| 1-Oct-14| 1-Oct-14| 2-Oct-14| Y| 0|
1| 4| 1-Nov-14| 1-Nov-14| 2-Oct-14| Y| 4|
1| 5| 1-Dec-14| 1-Dec-14| 24-Nov-14| Y| 5|
1| 6| 1-Jan-15| 1-Jan-15| 9-Dec-14| Y| 6|
答案 0 :(得分:0)
谢谢大家的帮助。我通过在该表上应用索引解决了问题。现在我的工作每秒移动3万条记录。