在SQL中跟踪基于天数的用户分配日期

时间:2018-08-01 13:04:43

标签: sql

似乎我遇到了另一个问题。 DAVID P和Toner Mann提供的解决方案对于某些票证可以很好地工作,但是我确实有另一张票证,该票证不适用于联接jointed_to = Assigned_from的情况。请检查随附的样本数据。我需要找到任何用户处理票证的时间。另外,assigned_to和assigned_from不能始终相同。 sample data在所附的场景中,詹姆斯工作了61天。

谢谢, Naveen

2 个答案:

答案 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