我有一个名为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
答案 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,它有问题。