Sql 基于数据库数据获取一组日期/时间范围

Sql 基于数据库数据获取一组日期/时间范围,sql,Sql,我有一个SQL2005DB,里面充满了活动记录,包括一个DateTime列、一个DeviceID和各种数据位。我需要一个查询,该查询将根据DeviceID(可能受开始/结束时间限制)为我提供一个日期/时间范围列表。此外,我会考虑一个新的范围开始至少60分钟后,旧的一个结束,如果它小于60min,那么它是旧范围的一部分。 示例数据: DateTime DeviceID 2009-10-11 12:01:30 Dev1 2009-10-11 12:02:30

我有一个SQL2005DB,里面充满了活动记录,包括一个DateTime列、一个DeviceID和各种数据位。我需要一个查询,该查询将根据DeviceID(可能受开始/结束时间限制)为我提供一个日期/时间范围列表。此外,我会考虑一个新的范围开始至少60分钟后,旧的一个结束,如果它小于60min,那么它是旧范围的一部分。 示例数据:

DateTime DeviceID 2009-10-11 12:01:30 Dev1 2009-10-11 12:02:30 Dev1 2009-10-11 12:03:21 Dev1 2009-10-11 12:04:30 Dev1 2009-10-11 12:05:45 Dev1 2009-10-11 12:06:10 Dev1 2009-10-11 12:07:40 Dev1 2009-10-11 12:08:20 Dev1 2009-10-11 13:30:11 Dev1 2009-10-11 13:32:21 Dev1 2009-10-11 13:36:45 Dev1 2009-10-11 13:39:16 Dev1 2009-10-11 13:42:18 Dev1 2009-10-11 13:46:22 Dev1 2009-10-11 13:48:35 Dev1 预期成果:

StartDate EndDate 2009-10-11 12:01:30 2009-10-11 12:08:20 2009-10-11 13:30:11 2009-10-11 13:48:35 读一些关于

然后看看这个查询:

SELECT <br>
&nbsp;&nbsp;  DeviceID,<br>
&nbsp;&nbsp;  "DateTime",<br>
&nbsp;&nbsp;  ROW_NUMBER() OVER(PARTITION BY DeviceID ORDER BY "DateTime") OrdinalNumber<br>
FROM TableName

Then look at this query:

WITH DateTable <br>
AS<br>
(SELECT <br>
&nbsp;&nbsp;  DeviceID,<br>
 &nbsp;&nbsp; "DateTime",<br>
&nbsp;&nbsp;  ROW_NUMBER() OVER(PARTITION BY DeviceID ORDER BY "DateTime") OrdinalNumber<br>
FROM TableName)<br>
SELECT <br>
&nbsp;&nbsp;  D1.DeviceID,<br>
&nbsp;&nbsp;  D1."DateTime" EndDate,<br>
&nbsp;&nbsp;  D2."DateTime" StartDate<br>
FROM DateTable D1<br>
JOIN DateTable D2<br>
ON (D1.DeviceID = D2.DeviceID) <br>
&nbsp;&nbsp;  AND (D1.OrdinalNumber = D2.OrdinalNumber - 1) <br>
&nbsp;&nbsp;  AND (DATEDIFF(MINUTE,D1."DateTime",D2."DateTime") >= 60)<br>
我们正在寻找差距超过60分钟

现在,您必须从每一行获取StartDate,并将其与下一行的EndDate相匹配。现在是凌晨4点,我把它留给你: