sql - 检查上一条记录是否与上一条记录匹配的案例

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

最佳答案

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

在您的情况下,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

关于sql - 检查上一条记录是否与上一条记录匹配的案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21120395/

相关文章:

mysql - 错误 SQL 查询 : Use SUM method, 当 #1054 - 'tbl_customers.id' 中的未知列 'where clause'

excel - 使用 Excel 处理 SQL 数据(读/写)

c# - 如何使用 c# 将使用 odbc 源的特殊字符获取到 Oracle 数据库?

sql - 缺少关键字 (ORA-00905) - Oracle SQL Case 语句

c# - mysql 只返回一个值

sql - mysql中从一个字段提取数据到另一个字段

Oracle 12c Forms & Reports setup_fmw_12.2.1.3.0_fr_win64.exe 安装错误 : self-extraction to C:\. ..... .tmp 失败

c++ - 如何避免 SOCI 错误 : Null value fetched and no indicator defined

SQL Server : use CASE with LIKE

mysql - 使用 SQL CASE 语句替换列