【问题标题】:Remove semi-duplicate rows from a result set从结果集中删除半重复行
【发布时间】: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


【解决方案1】:

在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 2013-02-16
    • 2017-01-31
    • 2015-12-06
    相关资源
    最近更新 更多