似乎我遇到了另一个问题。 DAVID P和Toner Mann提供的解决方案对于某些票证可以很好地工作,但是我确实有另一张票证,该票证不适用于联接jointed_to = Assigned_from的情况。请检查随附的样本数据。我需要找到任何用户处理票证的时间。另外,assigned_to和assigned_from不能始终相同。 sample data在所附的场景中,詹姆斯工作了61天。
谢谢, Naveen
答案 0 :(得分:0)
正如我在其他评论中所说,您需要一个算法来计算两个日期之间的天数,@ DavidP指出,您还需要查询以提取日期以应用算法,因此这可能会有所帮助:
编辑: 再次感谢@DavidP的想法,下面的代码应该可以计算出天数差异:
with qry as (
Select [Ticket],
[Date] as startDate,
(Select MIN([Date])
from [yourTable] t2
where t2.[Assigned from] = t1.[Assigned to]
AND t2.[Date] >= t1.[Date]
) as endDate
from [yourTable] t1
where Ticket = '<value>'
and [Assigned To] = '<name>'
and Status = 'CASE_ASSIGNED'
)
select SUM(DATEDIFF(DAY,startDate,endDate)) as [Number of days] from qry
很显然,我没有测试此代码,但它应该给您开始日期和结束日期,以计算天数差异。
您可能需要添加带有时间(小时和分钟)的列,以提高准确性。
答案 1 :(得分:0)
由于注释中无法获得良好的代码格式,因此我将其发布为答案。这在很大程度上是TonnerMààn的答案的扩展,该答案将一些计算引入查询中。我在包含该问题的示例数据的本地数据库上测试了此查询。
SELECT [Ticket],[AssignedTo],SUM([Days]) AS [Duration]
FROM
(
Select [Ticket],[AssignedTo],
DATEDIFF(Day, [Date], (Select MIN([Date])
from [TicketEvents] t2
where t2.[AssignedFrom] = t1.[AssignedTo]
AND t2.[Date] >= t1.[Date]
)) as [Days]
from [TicketEvents] t1
where Ticket = '22479-J8C4L3'
and Status = 'CASE_ASSIGNED'
) AS InnerQuery
GROUP BY [Ticket],[AssignedTo]
结果:
Ticket AssignedTo Duration
22479-J8C4L3 Christine 12
22479-J8C4L3 Phillips 4
22479-J8C4L3 Stacey 8