2017-02-28 25 views
1

我正在嘗試爲Peoplesoft編寫一個SQL,這個SQL有一定數量的時間表(RECNAME)被用戶查詢使用一段時間。在表中乘以Peoplesoft/Oracle SQL

從PSQRYRECORD我可以檢索QRYNAME & RECNAME(QRYNAME可以有多個RECNAME)

從PSQRYSTATS我可以檢索QRYNAME & EXECCOUNT(QRYNAME僅具有1 EXECCOUNT),通過OPRID & LASTEXECDTTM濾波。

但是,這是給我太高金額:

select A.RECNAME, Sum(B.EXECCOUNT) from FMSADM.PSQRYRECORD A, FMSADM.PSQRYSTATS B 
WHERE A.QRYNAME = B.QRYNAME 
AND A.OPRID = 'JDOE' 
AND B.LASTEXECDTTM BETWEEN to_date('01-JAN-16 00:00:00','DD-Mon-YY HH24:MI:SS') AND to_date('27-FEB-17 23:50:00','DD-Mon-YY HH24:MI:SS') 
GROUP BY A.RECNAME 
ORDER BY Sum(B.EXECCOUNT) DESC 

我想我需要通過EXECCOUNT來算RECNAME然後乘以但不能讓它開始工作。

謝謝!

回答

1

問題是PSQRYRECORD可能在多行中具有相同的OPRID,QRYNAME,RECNAME組合。當它這樣做時,你的執行計數就會與該查詢相乘。您需要從PSQRYRECORD獲得不同的OPRID,QRYNAME,RECNAME,然後將其加入PSQRYSTATS

WITH QRYREC AS (
    SELECT OPRID, QRYNAME, RECNAME 
    FROM PSQRYRECORD 
    GROUP BY OPRID, QRYNAME, RECNAME 
) 
SELECT QRYREC.RECNAME, SUM(QS.EXECCOUNT) 
FROM QRYREC 
JOIN PSQRYSTATS QS ON QS.QRYNAME = QRYREC.QRYNAME 
WHERE 
QRYREC.OPRID = 'JDOE' 
AND QS.LASTEXECDTTM BETWEEN to_date('01-JAN-16 00:00:00','DD-Mon-YY HH24:MI:SS') AND to_date('27-FEB-17 23:50:00','DD-Mon-YY HH24:MI:SS') 
GROUP BY QRYREC.RECNAME 
ORDER BY SUM(QS.EXECCOUNT) DESC