繁体   English   中英

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

[英]SQL Server 2008 Table of Customer Visits determine if Return time of a visit is less than 72 hours from previous visit

我有一个称为VISITS的表,该表在客户每次访问我们的设施时进行跟踪。 我需要找出个别客户在上次出发时间后72小时内何时返回我们的工厂。 我已经能够基于对堆栈溢出的发现鞭打重复的客户支票,但是事实证明,将较新访问的ArrivalTime列与较早访问的DepartureTime列进行比较要困难得多,我想知道它是否甚至理论上是可能的。

我本质上必须过滤掉重复的客户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

如果你自我加入怎么样

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,则存在问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM