SQL中的某些条件的日期减法

时间:2016-09-30 13:43:32

标签: sql oracle oracle11g

我有以下查询:

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中它真的可能吗?

2 个答案:

答案 0 :(得分: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); 

答案 1 :(得分:0)

  TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    Memo1: TMemo;
    procedure ApplicationEvents1Hint(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

procedure TForm1.ApplicationEvents1Hint(Sender: TObject);
begin
  Memo1.Lines.Add(Application.Hint);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  Application.Hint := 'Hello';
end;
相关问题