2016-12-13 5 views
-3

私はそれぞれの状態の時間差を計算しようとしていますTSQLは

SQL Table

(1イメージ)以下のようにSQLテーブルを持っているそれぞれの国において時間とともに、中にログインの間の合計時間を計算し、ログアウトします以下のように、エージェントのログインとログアウトの合計時間(図2)。私はリード/ラグ関数を使用しようとしていますが、出力を達成することはできません。あなたはこれを助けてくれますか?

Time In Each Stage and Final Desired Output

+2

画像を投稿することはできません。 **完全なサンプル入力と出力を提供してください。あなたは現在のデータセットに秒を表示していませんが、出力にそのデータセットを表示しています。また、どのバージョンのSQL? LEAD/LAGを指定して2012年を前提としていますが、2012年以降でなければこの機能は利用できず、ウィンドウ機能を使用する必要があります。 – scsimon

+0

私は秒を表示していないExcelに結果をコピーしました。私はSQL 2012を使用しています。 – Rahul

+3

これまで行っていたことを含め、すでに尋ねられているように、写真の代わりに適切な例が含まれています。 –

答えて

-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