Sql 从结果集中删除半重复行
我有一个日志表(table_B),它通过主表(table_a)中的触发器进行更新。每当插入/更新表_A上的任何字段时,触发器都会运行。我们需要拿出一份报告,只显示表_B-上更新的子集,即用户只对以下字段感兴趣:Sql 从结果集中删除半重复行,sql,sybase,duplicate-removal,Sql,Sybase,Duplicate Removal,我有一个日志表(table_B),它通过主表(table_a)中的触发器进行更新。每当插入/更新表_A上的任何字段时,触发器都会运行。我们需要拿出一份报告,只显示表_B-上更新的子集,即用户只对以下字段感兴趣: ID STAGE STATUS UPDATE_DATE 我需要从结果集中删除顺序重复项,即,假设表_B中存在以下条目: +----+-----+------+-----------+ |ID |STAGE|STATUS|UPDATE_DATE| +----+-----+------+
ID
STAGE
STATUS
UPDATE_DATE
我需要从结果集中删除顺序重复项,即,假设表_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行有两个重复的条目(第4行由于表A中某个其他字段的更新而被触发到表B中,但其阶段/状态组合没有改变,因此可以忽略)
因此,当我发现结果集中的下一行是当前行的重复行(并且仅是下一行)时,我如何从结果集中删除它,或者忽略首先选择它。我将使用一个存储的进程来执行这个操作-这个过程会涉及到游标吗
Sybase 12.5,但语法非常接近SQL Server。查看了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
选择id、状态、阶段、分钟(更新日期)
来自表B
其中id=
按id、状态、阶段分组
您的Sybase版本是否支持lead()
/lag()
函数?不确定Gordon-但我想我有基于另一个线程的答案。很快就会发布。