2014-01-09 108 views
1

使用LAG或其他功能我要找的Oracle SQL查詢我一直在掙扎具有一定的指導。在SUM條款

我有一個包含時間戳和幫助臺票號數據表...

每次技術人員進行了更改的票據或記錄記下相應時間戳將沿着登錄數據庫與票號。我試圖完成的是計算每個系列中票號的第一次出現,並且我不能使用不同的原因,因爲如果技術人員在當天晚些時候再次工作票,它將不會再次對票進行計數。請參考附圖。

http://s13.postimg.org/i5gx4l4nb/sample.jpg

使用滯後功能我可以標記在行級門票,但我不能添加此到SUM條款來實現我的終極目標。

CASE WHEN LAG(IPCS_AUDIT_HISTORY.ENTITYID,1) over (ORDER BY IPCS_AUDIT_HISTORY.HISTORYDATE)=IPCS_AUDIT_HISTORY.ENTITYID THEN 0 ELSE 1 END 

任何想法或想法,採取什麼方向?

SELECT 
    UPPER(IPCS_PLANNER.PLANNERSURNAME || ', ' || IPCS_PLANNER.PLANNERFIRSTNAME) AS FULL_NAME, 
    COUNT(DISTINCT IPCS_AUDIT_HISTORY.ENTITYID) AS TICKETS_COUNT, 
    SUM(CASE WHEN LAG(IPCS_AUDIT_HISTORY.ENTITYID,1) over (ORDER BY IPCS_AUDIT_HISTORY.HISTORYDATE)=IPCS_AUDIT_HISTORY.ENTITYID THEN 0 ELSE 1 END) AS TOUCH_COUNT 
FROM 
    IPCS_AUDIT_HISTORY, 
    IPCS_PLANNER 
WHERE 
    IPCS_AUDIT_HISTORY.PLANNERID=IPCS_PLANNER.PLANNERID and 
    TRUNC(IPCS_AUDIT_HISTORY.HISTORYDATE, 'IW')='30-DEC-13' 
GROUP BY 
    UPPER(IPCS_PLANNER.PLANNERSURNAME || ', ' || IPCS_PLANNER.PLANNERFIRSTNAME) 
+0

什麼是從期望的輸出的中相應的圖象數據樣本示出? – peterm

+0

計數爲5.如果我在圖片的桌子上運行選擇,我會得到4票數和5的觸摸計數... – user2708719

回答

0

更新:嘗試這種方式

SELECT full_name, 
     COUNT(DISTINCT entityid) ticket_count, 
     COUNT(DISTINCT series) - COUNT(DISTINCT entityid) touch_count 
    FROM 
(
    SELECT plannerid, full_name, entityid, 
     rnum - ROW_NUMBER() OVER (PARTITION BY plannerid, entityid ORDER BY rnum) series 
    FROM 
    ( 
    SELECT p.plannerid, 
      UPPER(p.plannersurname || ', ' || p.plannerfirstname) full_name, 
      h.historydate, 
      h.entityid, 
      ROW_NUMBER() OVER (PARTITION BY p.plannerid ORDER BY h.historydate) rnum 
     FROM ipcs_audit_history h JOIN ipcs_planner p 
     ON h.plannerid = p.plannerid 
    WHERE h.historydate >= TO_DATE('30-DEC-13') 
     AND h.historydate < TO_DATE('30-DEC-13') + 1 
) q 
) p 
GROUP BY plannerid, full_name 

樣品輸出:

 
| FULL_NAME | TICKET_COUNT | TOUCH_COUNT | 
|-----------|--------------|-------------| 
| DOE, JOHN |   4 |   1 | 

這裏是SQLFiddle演示

+0

Hello-感謝您抽出時間你一天的在這方面努力。我非常感謝你的指導。不幸的是,我無法讓你的代碼正常工作,但它確實讓我指出了正確的方向,並且最終提出瞭如下按需工作的聲明。 – user2708719

0

我可能誤解了你的問題,但我相信,你只需要添加ROWS BETWEENSUM()

SUM(ColName) OVER(ORDER BY Col2 ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) 
+0

謝謝你,我會研究這一點,並嘗試實施。 – user2708719