【发布时间】:2014-01-17 13:48:13
【问题描述】:
我有一个日志表 (TABLE_B),它通过主表 (TABLE_A) 中的触发器进行更新。每当插入/更新 TABLE_A 上的任何字段时,触发器都会运行。我们需要提取一个仅显示 TABLE_B 更新子集的报告 - 即用户只对字段感兴趣:
ID
STAGE
STATUS
UPDATE_DATE
我需要从结果集中删除连续的重复项,即假设 TABLE_B 中存在以下条目:
+----+-----+------+-----------+
|ID |STAGE|STATUS|UPDATE_DATE|
+----+-----+------+-----------+
|4567|7 |9 |2012-12-25 |
+----+-----+------+-----------+
|4567|4 |2 |2012-12-24 |
+----+-----+------+-----------+
|4567|4 |3 |2012-12-23 |
+----+-----+------+-----------+
|4567|4 |2 |2012-12-22 |
+----+-----+------+-----------+
|4567|4 |2 |2012-12-21 |
+----+-----+------+-----------+
|4567|4 |3 |2012-12-20 |
+----+-----+------+-----------+
|4567|4 |2 |2012-12-19 |
+----+-----+------+-----------+
从底部开始,我需要提取第 1、2、3、5、6、7 行 - 仅省略第 4 行:我在第 3 行和第 4 行有 2 个条目是重复的(第 4 行已被触发到 TABLE_B 中,因为对 TABLE_A 中某个其他字段的更新,但它的阶段/状态组合没有改变,因此可以忽略)。
所以,当我发现结果集中的下一行是当前行的副本(并且只有下一行)时,我该如何从结果集中删除它,或者忽略在第一行中选择它地方。我将使用存储过程执行操作 - 是否会涉及游标?
Sybase 12.5,虽然语法非常接近 SQL Server。
【问题讨论】:
-
您的 Sybase 版本是否支持
lead()/lag()函数? -
不确定戈登 - 但我想我有基于另一个线程的答案。即将发布。
标签: sql sybase duplicate-removal