Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 识别在任何60分钟内只拨打过一次电话的用户_Sql_Sql Server 2008 - Fatal编程技术网

Sql 识别在任何60分钟内只拨打过一次电话的用户

Sql 识别在任何60分钟内只拨打过一次电话的用户,sql,sql-server-2008,Sql,Sql Server 2008,我要搜索上次通话后一小时内拨打的电话。group by employees and day。我只想显示在1小时间隔内只拨打一次电话的行 样本数据: day calltime emplno empname 2013-11-13 2013-11-13 18:38:39.347 1 James Johnson 2013-11-12 2013-11-12 18:39:57.570 2 Steve Thomson

我要搜索上次通话后一小时内拨打的电话。group by employees and day。我只想显示在1小时间隔内只拨打一次电话的行

样本数据:

day          calltime                  emplno  empname
2013-11-13   2013-11-13 18:38:39.347   1       James Johnson
2013-11-12   2013-11-12 18:39:57.570   2       Steve Thomson
2013-11-12   2013-11-12 19:05:01.027   2       Steve Thomson
2013-11-12   2013-11-12 15:38:11.853   2       Steve Thomson
2013-11-12  2013-11-12 19:20:01.027    2       Steve Thomson
2013-11-12  2013-11-12 19:45:46.357    2       Steve Thomson
2013-11-12   2013-11-12 18:40:11.853   1       James Johnson
我想要这样的结果:

day          calltime                  emplno  empname
2013-11-13   2013-11-13 18:38:39.347   1       James Johnson
2013-11-12  2013-11-12 19:45:46.357    2       Steve Thomson
2013-11-12   2013-11-12 15:38:11.853   2       Steve Thomson
2013-11-12   2013-11-12 18:40:11.853   1       James Johnson

我不想显示调用2013-11-12 18:39:57.570、2013-11-12 19:05:01.027和2013-11-12 19:20:01.027,因为第二个调用发生在第一个调用的一个小时内,即使它在不同的小时内。一种方法是添加一个行号列,并进行自联接以计算到第一行的差异

DECLARE @x TABLE([day] DATE, calltime DATETIME, emplno INT, empname VARCHAR(32));

INSERT @x VALUES
('2013-11-13','2013-11-13 18:38:39.347',1,'James Johnson'),
('2013-11-12','2013-11-12 18:39:57.570',2,'Steve Thomson'),
('2013-11-12','2013-11-12 19:05:01.027',2,'Steve Thomson'),
('2013-11-12','2013-11-12 15:38:11.853',2,'Steve Thomson'),
('2013-11-12','2013-11-12 18:40:11.853',1,'James Johnson');


;WITH x AS 
(
  SELECT x.emplno, x.empname, c1 = x.calltime, c2 = x2.calltime 
  FROM @x AS x INNER JOIN @x AS x2 ON x2.emplno = x.emplno 
  AND x2.calltime > x.calltime AND x2.calltime < DATEADD(HOUR, 1, x.calltime)
),
y AS 
(
  SELECT x.emplno, x.empname, x.c1 FROM x
  UNION SELECT x.emplno, x.empname, x.c2 FROM x
)
SELECT [day] = CONVERT(DATE, calltime), calltime, emplno, empname FROM @x
EXCEPT SELECT CONVERT(DATE, c1), c1, emplno, empname FROM y;
WITH Calls AS
(
    SELECT 
        day, 
        calltime, 
        emplno, 
        empname,
        ROW_NUMBER() OVER (PARTITION BY emplno ORDER BY calltime) RowNum
  FROM CallLog

)
SELECT C1.*
FROM Calls C1
INNER JOIN Calls C2 
  ON C1.EmplNo = c2.EmplNO
     AND C2.RowNum = 1
WHERE DATEDIFF(minute,C2.CallTime, C1.CAllTime) <= 60

对不起,我是新来的。我希望我现在能更好地解释一切是的。请不要再换了。您所有的编辑都让它变得不那么清晰。@user2989103已寻址,请立即重试。谢谢,这几乎是我想要的,可能无法生成我想要的查询:-我编辑了一些示例数据,我不知道如何用英语更好地解释。电话2013-11-12 19:20:01.027被删除,因为它是在2013-11-12 18:39:57.570的一个小时内打的,这就是为什么我想展示2013-11-12 19:45:46.357。如果你想帮忙,我会心存感激。如果你不明白,还是谢谢!