2016-06-15 65 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