2016-09-30 28 views
-2

我有以下查询:日期减法与SQL一些条件

SELECT 
    tkoh.ticketid, 
    tkoh.ownergroup, 
    tkoh.owndate, 
    tck.ACTUALFINISH 
FROM 
    tkownerhistory tkoh 
LEFT JOIN 
    ticket tck on tck.ticketid = tkoh.ticketid 
WHERE 
    tkoh.ticketid IN ('О1253565', 'О1253578') 
    AND tkoh.ownergroup IS NOT NULL 
ORDER BY 
    tkoh.ticketid, tkoh.owndate; 

它返回是这样的:

enter image description here

,我需要时间来计算,其中每一组拥有的记录(当前记录的遗产 - 下一记录的遗产),但是,如果有最终所有者,则时间必须从ACTUALFINISH中减去,而不是从下一个记录中减去,因为它可以在事前完成。我用简单的IF在Excel file中完成了它,但是它在SQL中真的可行吗?

+3

您的预计产量将_greatly_在这里帮助。 –

+2

此外,请将数据发布为格式文本,而不是图片 – Aleksej

+2

您希望人们在某个网站上打开由陌生人发布的Excel文件?你住哪个星球? – mathguy

回答

0
SELECT t.*, 
     trim(to_char(floor(t.res_sec/60/60),'00'))||':'||trim(to_char(floor(mod(t.res_sec/60,60)),'00'))||':'||trim(to_char(mod(t.res_sec,60),'00')) as res_hhmiss 
FROM (SELECT 
     tkoh.ticketid, 
     tkoh.ownergroup, 
     tkoh.owndate, 
     tck.ACTUALFINISH, 
     abs(tkoh.owndate - nvl(lead(tkoh.owndate) over(order by tkoh.ticketid, tkoh.owndate), tck.ACTUALFINISH))*24*60*60 as res_sec 
     FROM tkownerhistory tkoh 
     LEFT JOIN ticket tck on tck.ticketid = tkoh.ticketid 
     WHERE tkoh.ticketid IN ('О1253565', 'О1253578') and tkoh.ownergroup is not null 
     ORDER BY tkoh.ticketid, tkoh.owndate); 
0
SELECT 
    tkoh.ticketid, 
    tkoh.ownergroup, 
    tkoh.owndate, 
    tck.ACTUALFINISH, 

    coalesce(datediff(day, tkoh.owndate, lead(tkoh.owndate) over(order by tkoh.ticketid, tkoh.owndate)), 
    datediff(day, tkoh.owndate, tck.ACTUALFINISH)) As Diff 

FROM tkownerhistory tkoh 
LEFT JOIN ticket tck on tck.ticketid = tkoh.ticketid 
WHERE tkoh.ticketid IN ('О1253565', 'О1253578') and tkoh.ownergroup is not null 
ORDER BY tkoh.ticketid, tkoh.owndate;