一道MSSQL笔试题

一道MSSQL笔试题

有一组通话记录,数据量较大。信息表结构如下:
ID 主叫号码 被叫号码通话起始时间   通话结束时间           通话时长

其中ID为主键
求其中同一个号码的两次通话之间间隔大于某个时间的通话记录ID 。不妨设时间间隔为2分钟

一、

select distinct id
from tb t
where id in (select id from tb where [主叫号码]=t.[主叫号码] and (datediff(minute,t.[通话起始时间],[通话结束时间])>=2))
or id=(case when (select count(*) from tb where [主叫号码]=t.[主叫号码] and (datediff(minute,t.[通话起始时间],[通话结束时间])>=2))>0 then id else 0 end)

二、

select t.id as '首次主叫ID'
 ,b.id as '下次叫ID'
from tb t
inner join tb b
on t.[主叫号码]=b.[主叫号码]
and datediff(minute,t.[通话起始时间],b.[通话结束时间])>2
and t.id<>b.id

希望大家奉献更好的方法。共同学习,不胜感激。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值