How can I find duplicate consecutive values in this table?

后端 未结 3 478
旧巷少年郎
旧巷少年郎 2020-12-16 03:52

Say I have a table which I query like so:

select date, value from mytable order by date

and this gives me results:

date             


        
3条回答
  •  孤街浪徒
    2020-12-16 04:46

    As @Janek Bogucki has pointed out LEAD and LAG are probably the easiest way to accomplish this - but just for fun let's try to do it by using only basic join operations:

    SELECT mydate, VALUE FROM
      (SELECT a.mydate, a.value,
              CASE WHEN a.value = b.value THEN '*' ELSE NULL END AS flag1,
              CASE WHEN a.value = c.value THEN '*' ELSE NULL END AS flag2
         FROM
           (SELECT ROWNUM AS outer_rownum, mydate, VALUE
             FROM mytable
             ORDER BY mydate) a
         LEFT OUTER JOIN
           (select ROWNUM-1 AS inner_rownum, mydate, VALUE
             from mytable
             order by myDATE) b
           ON b.inner_rownum = a.outer_rownum
         LEFT OUTER JOIN
           (select ROWNUM+1 AS inner_rownum, mydate, VALUE
             from mytable
             order by myDATE) c
           ON c.inner_rownum = a.outer_rownum
         ORDER BY a.mydate)
      WHERE flag1 = '*' OR
            flag2 = '*';
    

    Share and enjoy.

提交回复
热议问题