2016-06-15 10 views
1

エンティティフレームワークまたはlinqを使用してブレーク時間と合計をどのように計算することができますか?私は私のms SQLテーブルを説明しようとしました。あなたの助けに感謝します。EFまたはLinqでブレーク時間の長さを計算する

enter image description here

+---------+-------------------------+---------------+----------------+ 
| EventId | EventDurations   | EventName | AgentNumber | 
+---------+-------------------------+---------------+----------------+ 
| 1  | 2016-06-06 09:51:21.570 | Login   | 801   | 
| 2  | 2016-06-06 09:51:33.083 | Break   | 801   | 
| 3  | 2016-06-06 13:58:14.617 | Login   | 801   | 
| 4  | 2016-06-06 15:30:50.600 | Break   | 801   | 
| 5  | 2016-06-06 15:46:32.837 | Login   | 801   | 
| 6  | 2016-06-06 15:47:16.777 | Break   | 801   | 
+--------+--------------------------+---------------+----------------+ 
+0

また、私たちの開発環境にコピーして貼り付けることができる形式でデータを投稿してください。次に、答えをコード化してテストすることができます。 – Enigmativity

答えて

0

あなたは、SQLクエリで鉛を使用して、それを見つけることができます:

;with cte as (
select *, datediff(mi,EventDurations, lead(EventDurations,1,EventDurations) over(partition by EventName order by EventDurations)) dur from EventTable 
) 
select EventName, sum(dur) from cte group by EventName 

それはあなたがこれを確認することができEFまたはLINQ

+0

SQL Server 2008を使用していますが、組み込み関数が組み込まれていません –

+0

これを確認できますか? –

0

ではまだないのですか?リード/ラグなし

;WITH CTE as 
(
    SELECT RN = ROW_NUMBER() OVER (PARTITION BY EventName ORDER BY EventDurations), * 
    FROM EventsTable 
) 
SELECT [Cur_row].*, ISNULL(DATEADD(DAY, -1, [Next_Row].EventDurations), '31-Dec-2099') AS EndDate 
FROM CTE [Cur_row] LEFT JOIN CTE [Next_Row] 
ON [Cur_row].EventId = [Next_Row].EventId AND [Next_Row].RN = [Cur_row].RN + 1 
ORDER BY [Cur_row].RN;--if require add eventid 
関連する問題