基于sql中传输的时差逻辑

时间:2019-07-19 09:43:48

标签: sql sql-server

我有一个活动表,其中有一些票务活动数据。列是票证编号,由,日期和时间创建。首先,将在IVR或PinBased中创建票证,然后将其转移到代理。现在,仅在第一个创建的代理为IVR时,才需要获得IVR与代理之间的时差。如果第一代理不是IVR,则需要排除timediff。

可以说,对于Raj,由PinBased在7/19/2019 12:40 Am创建的票证随后转到IVR,因此我们需要排除此票证。

让我们为拉穆说由IVR在7/19/2019 04:40 Am创建的票证,然后在7/19/2019 04:40将其分配给拉穆,所以我需要显示timediff为3600秒。

如果IVR创建的票证,那么我需要获取第二行和第三行之间的时差。这是修复程序。

PFA样本数据。

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:0)

您要进行上一行比较,并且需要lag函数和datediff来提供帮助。

在下面的代码中,我在派生表的[Date and Time]中将每个参与者的最大CreatedBy分组,并在参与者不是IVR的情况下运行上述函数。我已经将一些测试数据放入临时表中,但是您可以适应自己的数据。要获取自己的列,您可以将inner join别名为t的派生表放到原始查询中:

    if object_id('tempdb..#temp') is not null
    drop table #temp;

create table #temp (
    TicketNo int,
    CreatedBy varchar(100),
    [Date and Time] datetime2(3),
    [Type] varchar(100),
    [Description] varchar (100)
)
insert into #temp (TicketNo,CreatedBy, [Date and Time],[Type],[Description])

values 
(1000, 'Agent1','2019-01-01 01:00:00.000','type3','desc3'),
(1000, 'IVR','2019-01-01 00:00:00.000','type2','desc2'),
(1000, 'IVR','2019-01-01 00:00:00.000','type1','desc1'),
(2000, 'Agent2','2019-01-01 07:00:00.000','type3','desc3'),
(2000, 'IVR','2019-01-01 05:00:00.000','type2','desc2'),
(2000, 'IVR','2019-01-01 05:00:00.000','type3','desc3');



select 
o.TicketNo,
o.CreatedBy,
o.[Date and Time],
o.[Type],
o.[Description],
lag(t.[Date and Time]) over (partition by t.TicketNo order by t.[Date and Time] asc)  as PreviousCreatedBy,
case when 
    t.CreatedBy <> 'IVR'
    then
        datediff(second
                    ,lag(t.[Date and Time]) over (partition by t.TicketNo order by t.[Date and Time] asc)
                    ,t.[Date and Time])
    else null
    end  as TimeDifference
from #temp as o
inner join (
    select
    TicketNo
    ,CreatedBy
    ,max([Date and Time]) as [Date and Time]
    from #temp
    group by TicketNo, CreatedBy
    ) as t
    on o.TicketNo = t.TicketNo
        and o.CreatedBy = t.CreatedBy

答案 1 :(得分:0)

您可以通过使用sql中的 lag 函数来实现此目的

YourModel.objects.filter(title__isnull=True)