SQL Server 2008客户访问表确定访问的返回时间是否少于上次访问的72小时

时间:2014-08-07 20:28:16

标签: sql sql-server

我有一个名为VISITS的表,可以跟踪客户每次访问我们的设施时的情况。我需要找到个人客户在最后一次出发时间的72小时内返回我们的工厂。我已经能够根据我对堆栈溢出的调查结果进行重复的客户检查,但是比较早期访问中较早访问DepartureTime专栏的ArrivalTime专栏证明要困难得多,而且我很难想知道它是否在理论上是可能的。

我基本上必须过滤掉重复的客户ID,然后将一行中的DepartureTime列与后续行中的ArrivalTime列进行比较。我发现DateDiff目前还没有达到任何目的,但是我应该在那里找出第1行到第2行的比较。如果可能的话,我希望最终加入我的客户名称表以获取客户详细信息,但我想首先要解决这个问题。

SELECT AccountNumber, CustomerID, ArrivalTime, DepartureTime 
from Visits 
WHERE CustomerID IN (
    SELECT CustomerID
    FROM Visits
    GROUP BY CustomerID HAVING (COUNT(CustomerID)>1)
)
--AND DATEDIFF(hh,DepartureTime, ArrivalTime) >72 
ORDER BY CustomerID

更新: 谢谢大家的快速回复。根据您的要求,这是一个小型数据代码段。至于表结构,哈哈。我不是管理员,只是一个编写一些自定义报告的实施者。我们的SQL表实际上是从应用程序访问的PVX表中更新的。更新仅在每天发送到SQL。简而言之,这些表格没有正确构建。运行典型的describe表查询时,所有这四列的值都为NULL ......

帐户,客户,到达时间,出发时间

202353  65  2013-12-12 07:30:00.000 2013-12-11 10:21:21.710
205643  65  2014-05-08 05:30:00.000 2014-05-11 13:00:00.000
203043  211 2014-01-13 11:53:00.000 2014-01-13 23:59:00.000
204283  211 2014-03-10 11:11:00.000 2014-03-10 23:59:00.000
203846  320 2014-02-06 10:23:00.000 2014-02-06 23:59:00.000
205378  320 2014-05-19 06:52:00.000 2014-05-21 09:40:00.000
206474  320 2014-05-15 07:55:00.000 2014-05-15 23:59:00.000
203883  338 2014-02-05 14:00:00.000 2014-02-05 15:01:00.000
204000  338 2014-02-12 12:50:00.000 2014-02-12 23:59:00.000
205069  488 2014-04-16 08:00:00.000 2014-04-16 23:59:00.000
205096  488 2014-04-23 06:49:00.000 2014-04-23 23:59:00.000
204779  513 2014-03-18 13:34:00.000 2014-03-18 23:59:00.000
206060  513 2014-05-05 13:48:00.000 2014-05-05 23:59:00.000
207057  523 2014-06-05 08:04:00.000 2014-06-05 23:59:00.000
205159  523 2014-03-24 08:10:00.000 2014-03-24 23:59:00.000
202607  546 2014-01-20 11:10:00.000 2014-01-20 23:59:00.000
201178  546 2013-09-17 08:17:00.000 2013-09-17 23:59:00.000
206627  560 2014-06-02 14:52:00.000 2014-06-02 23:59:00.000
206220  560 2014-05-12 12:30:00.000 2014-05-12 23:59:00.000
205894  986 2014-05-12 05:46:00.000 2014-05-12 23:59:00.000
204177  1062    2014-02-17 06:00:00.000 2014-02-18 09:08:00.000
203669  1062    2014-02-25 09:00:00.000 2014-02-25 13:53:00.000
204858  1115    2014-03-17 06:02:00.000 2014-03-17 23:59:00.000
204861  1115    2014-03-11 09:39:00.000 2014-03-11 23:59:00.000
202437  1126    2013-12-23 07:04:00.000 2013-12-23 23:59:00.000
203126  1126    2014-01-13 06:55:00.000 2014-01-14 08:55:00.000
203502  1274    2014-01-27 12:45:00.000 2014-01-27 23:59:00.000
203033  1274    2014-01-06 14:56:00.000 2014-01-06 23:59:00.000
205346  1274    2014-04-15 11:04:00.000 2014-04-16 15:10:00.000
206675  1274    2014-06-09 13:58:00.000 2014-06-09 23:59:00.000
203673  1499    2014-02-07 07:30:00.000 2014-01-31 13:24:35.040
203674  1499    2014-02-07 05:55:00.000 2014-02-07 23:59:00.000
203634  1586    2014-02-11 09:00:00.000 2014-02-11 16:09:00.000
204296  1586    2014-02-20 06:54:00.000 2014-02-20 23:59:00.000
203549  1799    2014-03-05 09:34:00.000 2014-03-05 23:59:00.000
202471  1799    2014-01-06 12:07:00.000 2014-01-06 23:59:00.000
204057  1810    2014-02-27 07:17:00.000 2014-02-27 23:59:00.000
205136  1810    2014-03-21 07:33:00.000 2014-03-21 23:59:00.000
205452  1903    2014-04-11 11:00:00.000 2014-04-07 16:34:41.533
205468  2312    2014-04-21 07:30:00.000 2014-04-17 07:46:56.433
205217  2312    2014-04-07 11:29:00.000 2014-04-07 16:31:00.000
205807  2312    2014-05-05 09:00:00.000 2014-04-22 17:54:51.603
204001  2496    2014-02-17 10:26:00.000 2014-02-17 23:59:00.000
203600  2496    2014-02-05 12:00:00.000 2014-02-05 15:03:00.000
201734  2605    2013-11-07 10:57:00.000 2013-11-08 17:28:00.000
204646  2605    2014-04-18 07:52:00.000 2014-04-18 23:59:00.000
206027  2905    2014-05-30 06:27:00.000 2014-05-30 23:59:00.000
206802  2905    2014-06-05 05:55:00.000 2014-06-05 23:59:00.000

1 个答案:

答案 0 :(得分:0)

如果你自己加入

怎么样?
SELECT v1.AccountNumber, v1.CustomerID, v1.ArrivalTime, v1.DepartureTime 
from Visits v1
  INNER JOIN Visits v2
    ON v1.customerId = v2.customerId
    AND v2.ArrivalTime > v1.DepartureTime
    AND v2.ArrivalTime != v1.ArrivalTime
WHERE DATEDIFF(hh,v1.DepartureTime, v2.ArrivalTime) >72 

我知道我错过了一些东西,但这似乎可以让你开始。这将允许您跳过内部组。行不会加入自己 - 他们只会参加第二次,第三次和第四次访问。我不确定你想用这些做什么,所以如果你需要确保它只是连续的访问,我还无法猜测。也就是说,如果只有2次访问,这可能会有效。超过2,它有问题。