hooyes 灵感纵容非凡

思考与实现SQL仅消除连续的重复行

2013-06-26
hooyes

问题

今天同事向我咨询一个SQL问题,假如,有如下数据表,需求是只消除连续的重复行。

如下数据(表名为 Hooyes, id 是连续的 ),

Hooyes-图1

id 0,1 的number (111) 连续的重复了,只保留一行,id 7,8 的number(111) 也连续重复了,也只保留一行。依此类推。 要求得到的结果如下:

Hooyes-图2

实现

那么如何实现呢?我思考了一下,给出了如下答案:

SELECT  t2.id ,
        t2.number
FROM    ( SELECT    id = id + 1 ,
                    number
          FROM      hooyes
          UNION
          SELECT    0 ,
                    0
        ) AS t1
        INNER JOIN hooyes t2 ON t2.id = t1.id
                                AND t1.number != t2.number

从SQL中,应该能看出来我的思路,就是把原数据表 number 列,错一位,id 不错位,然后再通过id 关联,(这个hooyes 表 id 是连续的,如果ID不是连续的,那个可以使用为 row_number 来进行错位)

Hooyes-图3

判断 number 不相等的列,便可以筛选出来了。


Similar Posts

Content
TOP