检查先前记录是否与最后记录匹配的情况

时间:2014-01-14 17:48:43

标签: sql oracle case

我有一个如下所示的查询结果。我希望在查询结果中添加一个列,如果与同一[Machine]相关的最后一条记录的[FinishTime]与当前记录具有相同的[StartTime],则该列将标记为1。

因此,例如,在下表中,第5行([Machine] = RD103)有一个标志= 1,因为它的起始时间与它的最后一个记录条目(第3行)相同。

+---+-------+---------+-------+---------+----------------------+
|OID|Machine|StartTime|EndTime|DelayName|Consecutive Delay Flag|
+---+-------+---------+-------+---------+----------------------+
|1  |RD101  |20:00    |20:20  |A        |0                     |
+---+-------+---------+-------+---------+----------------------+
|2  |RD102  |21:00    |22:00  |A        |0                     |
+---+-------+---------+-------+---------+----------------------+
|3  |RD103  |23:00    |23:20  |B        |0                     |
+---+-------+---------+-------+---------+----------------------+
|4  |RD101  |20:20    |20:45  |C        |1                     |
+---+-------+---------+-------+---------+----------------------+
|5  |RD103  |23:20    |23:25  |A        |1                     |
+---+-------+---------+-------+---------+----------------------+

1 个答案:

答案 0 :(得分:3)

这是分析函数的一个很好的例子 - 它们不会强制您对结果进行分组(换句话说 - 它们仍然每行产生一个结果),但是您可以拥有与其他行相关的值。

在您的情况下,LAG函数应该可以解决问题:

SELECT oid, machine, starttime, endtime, delayname, 
       CASE WHEN starttime = 
                 LAG (starttime) OVER (PARTITION BY machine ORDER BY starttime) 
            THEN 1 
            ELSE 0 
       END AS flag
FROM   my_table