我有一个活动表,其中有一些票务活动数据。列是票证编号,由,日期和时间创建。首先,将在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样本数据。
答案 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)