我在 Oracle 10 中有一个表,其定义如下:
LOCATION HOUR STATUS
--------------------------------------
10 12/10/09 5:00PM 1
10 12/10/09 6:00PM 1
10 12/10/09 7:00PM 2
10 12/10/09 8:00PM 1
10 12/10/09 9:00PM 3
10 12/10/09 10:00PM 3
10 12/10/09 11:00PM 3
该表继续用于各种位置和少量状态值。每行涵盖一个位置的一小时。在该小时内从特定位置收集数据,并以块的形式进行处理。有时数据可用,有时不可用,并且该信息被编码在状态中。我正在尝试查找特定状态的运行,以便可以将上表转换为以下内容:
LOCATION STATUS START END
-----------------------------------------------------------
10 1 12/10/09 5:00PM 12/10/09 7:00PM
10 2 12/10/09 7:00PM 12/10/09 8:00PM
10 1 12/10/09 8:00PM 12/10/09 9:00PM
10 3 12/10/09 9:00PM 12/11/09 12:00AM
基本上将表格压缩为定义特定状态的每个延伸的行。我尝试了各种技巧,例如使用领先/滞后来确定开始和结束的位置等等,但所有这些都遇到了失败。到目前为止,唯一有效的技巧是以编程方式逐个遍历值,这很慢。有什么直接在 Oracle 中做的想法吗?谢谢!