我有一个包含以下列的事件表:
除了time_end之外的所有列都填充了数据(我当前的time_end列在表格中是NULL)。我需要做的是使用事件闭包数据填充time_end列。这实际上是来自同一设备的新事件发生的时间。 下面是一个示例数据模型,它最终应该如何工作:
sequence DeviceID time_start DeviceState time_end
--------------------------------------------------------------------------------------
1 000012A7 2010-10-31 12:00 14 2010-10-31 12:10
2 000012A7 2010-10-31 12:10 18 2010-10-31 12:33
3 000012A8 2010-10-31 12:20 16 2010-10-31 13:01
4 000012A7 2010-10-31 12:33 13 2010-10-31 12:47
5 000012A7 2010-10-31 12:47 18 2010-10-31 13:20
6 000012A8 2010-10-31 13:01 20 2010-10-31 13:23
7 000012A7 2010-10-31 13:20 05 2010-10-31 14:12
8 000012A8 2010-10-31 13:23 32 2010-10-31 14:15
9 000012A7 2010-10-31 14:12 12
10 000012A8 2010-10-31 14:15 35
我的想法是,对于表中的每条记录,我需要为特定设备选择更高序列的记录,并使用该更高级别记录的time_start数据更新time_end。 有了这个,我将能够跟踪每个事件的时间段。
我正在考虑用函数调用来做这件事,但我有两个主要困难: 1.从例如:sequence = 2获取数据并更新sequence = 1的time_end 2.创建一个函数,当新记录添加到表中时,它将连续执行此操作
我对SQL很陌生,我很遗憾还有其他可能的东西。根据我的知识,我应该使用将数据引用到一起的函数,但是我目前的知识限制了我这样做。
我希望有人可以向我提供一些指导,指导我走哪条路,如果我走在正确的轨道上,可以给我一些反馈。非常感谢任何支持文章。
答案 0 :(得分:0)
查看:
CREATE VIEW tableview AS
with timerank AS
(
SELECT mytable.*, ROW_NUMBER() OVER (PARTITION BY DeviceID ORDER BY time_start) as row
FROM THE_TABLE mytable
)
SELECT tstart.*, tend.time_start AS time_end
FROM timerank tstart
LEFT JOIN timerank tend ON tstart.row = tend.row - 1
AND tstart.DeviceID = tend.DeviceID
编辑:我现在看到你的deviceID要求了。
答案 1 :(得分:0)
@OMG小马:我想这里的格式会更好一些:
更新你的时间 SET time_end =(选择TOP 1 t.time_start 来自你的时间 WHERE.DeviceID = YOUR_TABLE.DeviceID AND t.time_start> YOUR_TABLE.time_start ORDER BY t.time_start ASC)