2016-12-13 2 views
-3

내가 각 상태의 시간 차이를 계산하려고TSQL은

SQL Table

(1 이미지) 다음과 같이 SQL 테이블이 각 주에 시간과 함께, 로그인 사이 총 시간을 계산하고 로그 아웃하기 아래와 같이 상담원의 로그인과 로그 아웃 사이의 총 지속 시간 (이미지 2). 리드/래그 기능을 사용하려고하지만 출력을 얻을 수 없습니다. 이걸 좀 도와 주실 래요?

Time In Each Stage and Final Desired Output

+2

시도 게시 텍스트가 아닌 이미지. ** complete ** 샘플 입력 및 출력도 제공하십시오. 현재 데이터 집합에 초를 표시하지 않고 출력에 표시합니다. 또한, 어떤 SQL 버전입니까? LEAD/LAG가 주어진 2012 년이라고 가정합니다. 2012 년 이후에는이 기능을 사용할 수 없으며 창 기능을 사용해야합니다. – scsimon

+0

내가 그 안에 초를 표시하지 않은 엑셀로 결과를 복사 한, 나는 2012 년 – Rahul

+3

는 지금까지 수행하고, 같은 이미 요청, 대신 사진의 적절한 예를 포함한다 무엇 이건 포함 SQL을 사용하고 있습니다. –

답변

-1

아래의 코드 조각은 당신이 가야 도움이 될 것입니다 당신이 총 로그를 얻고 최소 및 최대를 사용하여 시간을 로그 아웃하는 방법을 알고 있다고 생각

;WITH TotalDuration as 
(
    SELECT LogIN = Min(DateTime) 
      ,LogOut = Max(DateTime) 
      ,AgentID 
    FROM YourTable 
    Group BY AgentID 

) 

SELECT Duration = DATEDIFF(MINUTE, LogIN, LogOut) 
     ,AgentId 
FROM TotalDuration 
ORDER BY AgentId 



--TimeInState = datediff(minute, [DateTime], LEAD([DateTime], 1) OVER (Partition BY AgentID ORDER BY [DateTime])) 
+0

OP는 로그인 및 로그 아웃뿐만 아니라 모든 상태 (예약, 읽기, 말하기 등)에서 시간을 집계하려고합니다. – scsimon

+0

답장을 보내 주셔서 감사합니다. 로그인하고 로그 아웃을 Min (datetime) 및 Max (Datetime)로 말했을 때 매일 매일의 기간을 제한해야합니다. 각 주마다 총 소요 시간과 함께 모든 주에서 시간을 합산하려고합니다. 상담원이 내일에오고 로그인하고 로그 아웃하면 별도의 기간이 필요합니다. – Rahul

-1

... 여기있다 LEAD 및 LAG가 필요합니다.

with cte as(
    select 
     agentid, 
     eventtype, 
     [DateTime], 
     datediff(mi,[DateTime],LEAD([DateTime]) over (partition by agentid order by [DateTime])) as [Time_in_state] 
    from yourTable) 

select 
    agentid, 
    eventtype, 
    cast([DateTime] as Date) as TheDate, 
    sum(Time_in_state) as TotalTime, 
from cte 
group by 
    agentid, 
    eventtype, 
    cast([DateTime] as Date) 
+0

누구나 이것이 도움이되지 않았거나 효과가 없었던 이유에 대해 자세히 설명하고 싶습니까? :) ' – scsimon