通常,我的任务是这样的:不同的操作有很多 ID 和时间戳。我需要在其中找到这些 ID 的位置
A1, A1, A2, A3, ..., 一个
存在Ai、Al、Am (1 <= i,l,m <= n),即1小时<=timediff(Ai, Al)<=1周和1小时<=timediff(Al, Am) <=1 周。 这里的 A 表示 Action 的时间。
特别是,我有数据(如下所示)并且只想找到以下陈述为真的那些 ID:相同的 ID,3 次操作之间至少间隔 1 小时,并且它们之间的间隔不超过 1 周。
ID EventDate
6727 2014-12-12 09:41:02.0
17390 2014-12-12 10:06:03.0
18179 2014-11-12 10:18:08.0
18179 2014-12-12 11:17:36.0
18179 2014-12-12 12:17:45.0
18179 2014-12-12 12:17:56.0
262070 2014-11-12 11:30:00.0
262070 2014-11-12 11:33:26.0
262070 2014-12-12 11:33:26.0
262070 2014-12-12 10:17:19.0
例如,对于该示例,它可能是 18179(因为我可以在那里找到 3 个操作:10:06:03.0、11:17:36.0 和 12:17:56.0)但不是 262070(因为没有 3 个操作在日志中的 1 小时到 1 周内)。
有人可以帮助我以最方便的 SQL 方式完成此操作,但无需存储过程。
最佳答案
你试过这样的事情吗
SELECT Start.ID FROM
Table AS Start
INNER JOIN Table AS Middle ON Start.ID = Middle.ID AND DATEDIFF( hour, Start.EventDate,Middle.EventDate) > 1 AND DATEDIFF( week , Start.EventDate,Middle.EventDate) < 1
INNER JOIN Table AS End ON Start.ID = Middle.ID AND DATEDIFF( hour, End .EventDate,Middle.EventDate) > 1 AND DATEDIFF( week , End .EventDate,Middle.EventDate) < 1
WHERE Start.ID IS NOT NULL AND Middle.ID IS NOT NULL AND End .ID IS NOT NULL
关于sql - 查找它们之间具有特定时间增量的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27441806/