我正在寻找一些关于我一直在努力解决的 Oracle SQL 查询的指导。
我有一个包含时间戳和服务台票号的数据表...
每次技术人员对票据进行更改或记录注释时,相应的时间戳都会与票据编号一起记录在数据库中。我想要完成的是计算每个系列中票号的第一次出现,并且我不能使用不同的,因为如果技术人员在当天晚些时候再次处理票证,它不会再次计算票证。请参考附图。
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
Run Code Online (Sandbox Code Playgroud)
关于采取这个方向有什么想法或想法吗?
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)
Run Code Online (Sandbox Code Playgroud)
我可能会误解你的问题,但我相信你只需要添加ROWS BETWEEN到你的SUM():
SUM(ColName) OVER(ORDER BY Col2 ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
Run Code Online (Sandbox Code Playgroud)