如何过滤彼此之间5分钟之内的数据?

时间:2019-06-19 14:04:17

标签: sql tsql

我需要为报告生成数据。在此报告中,我正在监视客户端丢弃的唯一呼叫的数量,但是,如果客户端每分钟呼叫一次并断开连接,则需要将其视为1个呼叫。我们已决定阐明在首次通话后5分钟内发生的所有通话。

我的数据看起来像

CREATE_DATE_TIME|Number

2019-06-03 09:10:56.0|100037729

2019-06-03 09:10:57.0|100037729

2019-06-03 09:10:58.0|100134657

2019-06-03 09:10:59.0|101401435

2019-06-03 09:11:00.0|101401435

2019-06-03 09:11:01.0|104925349

我想要

2019-06-03 09:10:56.0   100037729

2019-06-03 09:10:58.0   100134657

2019-06-03 09:10:59.0   101401435

2019-06-03 09:11:01.0   104925349

因此,我尝试使用Datediff来消除其他重复项,只是为了获得更多重复项。

    SELECT Distinct [CREATE_DATE_TIME]
          ,right(Left([SUBJECT],16),11) as [Number] 
          --,datediff(mi,[CREATE_DATE_TIME],lag ([CREATE_DATE_TIME],1) over (order by [CREATE_DATE_TIME])) as timeprev
          --,CAse when datediff(mi,[CREATE_DATE_TIME],lag ([CREATE_DATE_TIME],1) over (order by [CREATE_DATE_TIME]))>5 then 'Unique' else 'Duplicate' end as [Time_dup_check]
    From [server1].[Database].[Schema].[call_list]

    Where datediff(mi,[CREATE_DATE_TIME],lag ([CREATE_DATE_TIME],1) over (order by [CREATE_DATE_TIME])) > 5

这是最终结果:(

CREATE_DATE_TIME|Number

2019-06-03 09:10|100037729

2019-06-03 09:10|100037729

2019-06-11 08:02|100134657

2019-06-11 08:02|100134657

2019-06-13 12:58|101401435

2019-06-13 12:58|101401435

2019-06-13 12:59|101401435

2019-06-13 12:59|101401435

2019-06-18 14:35|104925349

2019-06-18 14:35|104925349

有人可以帮我过滤吗?

1 个答案:

答案 0 :(得分:0)

您可以使用lag()

select cl.*
from (select cl.*,
             lag(create_date_time) over (partition by number order by create_date_time) as prev_created_date_time
      from [server1].[Database].[Schema].[call_list] cl
     ) cl
where prev_created_date_time is null or
      prev_created_date_time < dateadd(minute, -5, create_date_time)