【问题标题】:SQL how to highlight duplicates under some conditionsSQL如何在某些情况下突出显示重复项
【发布时间】:2017-03-08 11:58:38
【问题描述】:

我只需要在某些复杂条件下标记数据购买中的重复项。假设我有一张这样的表:

col1    col2
1       a
1       a
1       a
2       #B
2       #B
1       a
3       #B
3       #B
2       #B
1       a
4       #A
4       #A
5       c

我需要在以下位置标记这些记录:

col2 中的值以 '#' AND 开头(它是 col2 中的重复值并且它在 col1 中的不同值之下)。

所以我需要得到这个:

col1    col2    newcol
1       a   
1       a   
1       a   
2       #B      1
2       #B      1
1       a   
3       #B      1
3       #B      1
2       #B      1
1       a   
4       #A  
4       #A  
5       c   

之所以标记 col2 中带有“#B”的行是因为它在 col2 中是重复的,并且“#B”可以在 col1 中的“3”和“2”下找到(所以 2 个或更多不同的值) .没有标记带有“#A”的记录的原因是,虽然它们在 col2 中是重复的,但它们在 col1 中仅低于一个值(“4”)。

我在 dashDB 工作

【问题讨论】:

    标签: sql dashdb


    【解决方案1】:

    我认为 DashDB 支持窗口函数。如果是这样,你可以这样做:

    select col1, col2,
           (case when min_col1 <> max_col1 then 1 end) as flag
    from (select t.*,
                 min(col1) over (partition by col2) as min_col1,
                 max(col1) over (partition by col2) as max_col1
          from t
         ) t;
    

    你也可以在没有窗口函数的情况下做类似的事情。

    这是另一种方法:

    select t.*, t2.flag
    from t join
         (select col2,
                 (case when min(col1) <> max(col1) then 1 end) as flag
          from t
          group by col2
         ) t2
         on t.col2 = t2.col2;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      相关资源
      最近更新 更多