检查前一条记录是否与最后一条记录匹配的案例

3

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

例如,在下表中,对于行5([Machine] = RD103),存在标记=1,因为它具有与其上一条记录条目(第三行)相同的开始时间。

+---+-------+---------+-------+---------+----------------------+
|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                     |
+---+-------+---------+-------+---------+----------------------+

表格格式不太对。如果我能得到足够的声誉状态,将尝试上传图片。 - italian_homes
不需要,我通过编辑修复了格式。 - valverij
1个回答

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

哇,谢谢你这么快的回复。我会在明天早上尝试一下,并告诉你我的进展情况! - italian_homes
好的,终于测试过了...这个很棒。我只需要做一个小改动:Lag(endtime)。非常感谢。 - italian_homes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接