我有一个看起来像这样的架构:
------------------------------------
ID | Time | Type | Description | obj
------------------------------------
有些数据会像
1 | 01/01/1900 01:01:01 AM | 1 | Start | O1
2 | 01/01/1900 01:01:02 AM | 1 | Start | O2
3 | 01/01/1900 01:01:03 AM | 2 | Stop | O1
4 | 01/01/1900 01:01:04 AM | 2 | Stop | O2
笔记:
- O1、O2等是进程操作的对象的ID。开始/停止时间之间将是一致的,但是每个对象会有多个开始/停止时间(该过程将多次开始和结束对特定对象的操作,并且我的查询需要为每次选择记录进程处理了该对象)
- 为了清楚这个问题,描述说开始/停止。在实践中,它有各种各样的数据被解析出来。
所以,我需要的是最接近的开始时间和停止时间对。换句话说:对于每个开始时间,我都需要下一个最近的停止时间。因此,上面示例数据(仅选择的 id)的 select 语句的结果将返回:
(1, 3)
(2, 4)
我试过的:
SELECT obj,
[Time] AS StartTime,
(SELECT MIN([TIME]) AS t
FROM TheTable
WHERE [Type] = 2
HAVING MIN([Time]) > StartTime) AS StopTime
FROM TheTable
WHERE [Type] = 1;
这显然不起作用,因为内部选择不知道 StartTime。如果内部选择中没有 Have 子句,它会运行,但正如您所料,我会为所有条目获得相同的 StopTime。当然,这不是我需要的。
有什么办法可以解决这个问题吗?