Oracle Lag-确定先前的行列是否与当前行相同

时间:2012-11-26 01:00:57

标签: sql oracle lag analytical

是否可以使用oracle中的分析函数(例如滞后)检查上一行,并根据2列确定这些值是否与当前行完全相同。如果是,则输出字母'Y',否则输出'N'。

类似的东西:

IF prev.col1 = curr.col1 and prev.col2 = curr.col2 THEN 'Y' ELSE 'N'

我想使用这个Y或N来过滤掉我正在编写的Crystal Report中的这些记录。

1 个答案:

答案 0 :(得分:3)

是的,但由于分析处理得相当晚,您需要将分析作为子查询编写查询:

SELECT CASE WHEN col1 = prev_col1 AND col2 = prev_col2 THEN 'Y' ELSE 'N' END as yesno
  FROM (
SELECT col1, col2, 
       LAG( col1, 1 ) OVER ( ORDER BY col1, col2 ) AS prev_col1
       LAG( col2, 1 ) OVER ( ORDER BY col1, col2 ) AS prev_col2
  FROM mytable
)

您需要根据您定义“上一个”行的方式调整ORDER BY子句。如果您不希望将整个表视为一组行,则可能还需要添加PARTITION BY子句。