求其中同一个主叫号码的两次通话之间间隔大于10秒的通话记录ID

例如:6,7,8,9,10条记录均符合

ID 主叫号码 被叫号码      通话起始时间            通话结束时间            通话时长

1  98290000 0215466546656 2007-02-01 09:49:53.000 2007-02-01 09:50:16.000 23

2  98290000 021546654666  2007-02-01 09:50:29.000 2007-02-01 09:50:41.000 12

3  98290000 021546654666  2007-02-01 09:50:58.000 2007-02-01 09:51:12.000 14

4  68290900 0755133329866 2007-02-01 10:04:31.000 2007-02-01 10:07:13.000 162

5  78290000 0755255708638 2007-02-01 10:48:26.000 2007-02-01 10:49:23.000 57

6  78290000 0755821119109 2007-02-01 10:49:39.000 2007-02-01 10:52:55.000 196

7  78290000 035730928370  2007-02-01 11:30:45.000 2007-02-01 11:31:58.000 73

8  78290000 0871138889904 2007-02-01 11:33:47.000 2007-02-01 11:35:00.000 73

9  68290000 035730928379  2007-02-01 11:52:20.000 2007-02-01 11:54:56.000 156

10 68290000 0298521811199 2007-02-01 12:44:45.000 2007-02-01 12:45:04.000 19

将数据复制到记事本,保存为time.txt,导入到数据库,生成表[time],然后可做测试。得到三个方法:

--方法一
select distinct * from(
SELECT a.* FROM dbo.[time] a left join dbo.[time] b
ON a.phone=b.phone
WHERE a.id<b.id
AND DATEDIFF(second,a.st,b.et)>10
UNION ALL
SELECT a.* FROM dbo.[time] a left join dbo.[time] b
ON a.phone=b.phone
WHERE a.id>b.id
AND DATEDIFF(second,b.st,a.et)>10) a
order by id,phone

--方法二
SELECT
distinct
a.* FROM dbo.[time] a left join dbo.[time] b
ON a.phone=b.phone
WHERE a.id<>b.id
AND (DATEDIFF(second,a.st,b.et)>10 or DATEDIFF(second,b.st,a.et)>10)
order by id,phone

--方法三
select * from dbo.[time] t
where exists(select 1 from dbo.[time] where id<>t.id
and phone=t.phone
AND (DATEDIFF(second,st,t.et)>10 or DATEDIFF(second,t.st,et)>10))

我最喜欢方法三,采用exists语句。网上的许多SQL面试答案,通常用IN之类,极少用EXISTS,可能是习惯问题。

这道面试题,是从网上一篇文章里抄过来,作者给出的答案是:

SELECT DISTINCT a.* FROM dbo.hc a left join dbo.hc b

ON a.主叫号码=b.主叫号码

WHERE a.id<>b.id AND (DATEDIFF(second,a.通话起始时间,b.通话结束时间)>10 AND

DATEDIFF(second,b.通话起始时间,a.通话结束时间)>10)

我觉得在这里用 AND 是有问题的。

参考文章:

http://blog.sina.com.cn/s/blog_63041bb80101a8mn.html

求其中同一个主叫号码的两次通话之间间隔大于10秒的通话记录ID的更多相关文章

  1. 计算两个NSDate之间,相隔多少秒数

    计算两个NSDate之间,相隔多少秒数 //两个时间间隔秒数 - (NSInteger)intervalSecondsWithSmallDate:(NSDate*)smallDate bigDate: ...

  2. MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数

    MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数 计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数,这里主要分享的是通过MySql内置的函数 TimeStampDiff() ...

  3. PHP计算两个时间戳之间间隔时分秒

    /功能:计算两个时间戳之间相差的日时分秒//$begin_time 开始时间戳//$end_time 结束时间戳function timediff($begin_time,$end_time){ if ...

  4. 处于同一个域中的两台Sql server 实例无法连接

    处于同一个域中的两台Sql server 实例无法连接,报的错误信息如下: A network-related or instance-specific error occurred while es ...

  5. js 求两个日期之间相差天数

    //求两个日期之间的相差天数 function daysBetween(DateOne, DateTwo) { var OneMonth = DateOne.substring(5, DateOne. ...

  6. 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序

    题目: 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序 public static int maxGap(int nums[]) { if ( ...

  7. js中同一个onclick绑定了两个js方法出现的问题

    问题: js中如果同一个onclick绑定了两个js方法问题,即 <li onclick="f1(),f2()"></li> 两个方法f1,f2中都分别有一 ...

  8. freeswitch 显示主叫名称和主叫号码

    1.指定主叫号码 origination_caller_id_number 参数来指定显示的主叫号码 2.指定主叫名称 origination_caller_id_name 参数来指定显示的主叫名称 ...

  9. 同一个Tomcat部署两个project之间的通信问题

    同一个tomcat下的两个project是无法通信的. 同一个tomcat中的project能互相调用吗 启动一个tomcat部署多个项目,那么每个项目算是一个线程还是进程呢? Tomcat中的pro ...

随机推荐

  1. java基础讲解06-----字符串

    1. package test; public class chb01 { public static void main(String[] ggs)        {            /**  ...

  2. python selenium--常用函数1

    新建实例driver = webdriver.Chrome() 1.通过标签属性Id查找元素 方法:find_element_by_id(element_id) 实例:driver.find_elem ...

  3. Linux软件包安装和卸载

    安装软件包的三种方法 1.rpm.yum.源码包 2.yum会把依赖的包都安装上 rpm包介绍 3.rmp报名组成结构:yum-3.4.3-132.el7.centos.0.1.noarch.rpm ...

  4. 解决Ubuntu下博通网卡驱动问题

    sudo apt-get install bcmwl-kernel-source我的无线网卡是BCM4312 802.11b/g 在12.04 会集成驱动,装完就能用,现在用14.04,16.04里面 ...

  5. c中头文件在cpp文件里引用和.h文件引用的思考

    我们在编敲代码中头文件是常常使用的. 可是头文件是应该包括在.H文件里还是在.cpp文件里.在这个其中有什么样去差别呢. 假如说我们编写了一个a.cpp  .我们将a.cpp文件的变量和函数申明在a. ...

  6. iOS开发多线程篇 04 —线程间的通信

    iOS开发多线程篇—线程间的通信 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任 ...

  7. NetBeans 设置code completion/auto pop-up delay

    如果你在Tools>Options>Editor>Code Completion>Language: Java 没有找到设置delay的选项.那就去C盘(如果你用的是Windo ...

  8. struts解决form提交的中文参数乱码问题

    根据struts的工作原理,原文摘自<Java Web 开发实战经典> 在运行一个JSP页面前,会调用指定的ActionForm中的reset()方法,进行表单元素的初始化 因此,在相应的 ...

  9. java集成开发环境常用操作集

    1.简单搭建maven集成开发环境 一.     Jetty安装 下载地址(包涵windows和Linux各版本,Jetty9需要JDK7):http://download.eclipse.org/j ...

  10. Linux 下使用静态google protocl buffer

    在Linux上编译google protobuff时,configure 默认选项是生成动态库,即libprotobuf.so文件.如果同时在多个动态库(动态库以dlopen方式动态加载)中使用同一b ...