从结果集中删除半重复行

时间:2014-01-15 20:12:04

标签: sql sybase duplicate-removal

我有一个日志表(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行和第3行有2个条目。 4是重复的(由于对TABLE_A中某些其他字段的更新,第4行已被触发到TABLE_B中,但它的阶段/状态组合没有改变,因此可以忽略它。)

因此,当我发现结果集中的下一行是当前行的重复行(并且只是下一行)时,如何将其从结果集中删除,或者忽略在第一行中选择它地点。我将使用存储过程执行操作 - 光标是否会涉及到这个?

Sybase 12.5,虽然语法非常接近SQL Server。

1 个答案:

答案 0 :(得分:0)

看看StackOF上的类似问题:

http://stackoverflow.com/questions/19774273/remove-duplicates-in-sql-result-set-of-one-table

我认为这回答了这个问题:

select id, status, stage, min(updated_date)
from TABLE_B
where id = <someValue>
group by id, status, stage