我有一个如下所示的查询结果。我希望在查询结果中添加一个列,如果与同一[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 |
+---+-------+---------+-------+---------+----------------------+
答案 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