【问题标题】:SQL: Eliminate rows that have one duplicate values in one columnSQL:消除一列中有一个重复值的行
【发布时间】:2013-06-26 14:42:35
【问题描述】:

我有一个表,其中一列中可能包含重复值。对于该列中的每个不同值,我只需要选择索引最小的行。我尝试了 distinct() min() 和 group by 的许多组合,但无法弄清楚这一点。此查询将在 sql server 2008 上运行。

color  |  index  |  user_id | organization_code
blue      44         xxx            yyy
blue      66         xxx            yyy
red       12         aaa            bbb
white     55         ccc            ddd
white     68         xxx            yyy

查询将返回第一、第三和第四行。

blue      44         xxx            yyy
red       12         aaa            bbb
white     55         ccc            ddd

【问题讨论】:

  • "one column", "that column", ... 我猜你在这里指的是color, 或user_idorganization_code - 你会注意实际指定哪一列是“那一列”。
  • 抱歉给您带来了困惑,但您正确地读懂了我的想法。在我的示例中,颜色列包含感兴趣的重复项。其他重复是草率输入的结果。

标签: sql sql-server-2008


【解决方案1】:

请勿使用index 等关键字作为列名。使用窗口函数解决您的问题,请参见下面的示例

 select color, [index], [USER_ID], organization_code from (
select *, ROW_NUMBER() over (partition by color order by [index]) as ranker from table
) Z where ranker = 1

【讨论】:

  • +1 表示关键字提示。会补充说user_id 也是一个错误的列名,因为它是一个函数的名称。
  • @1_CR 或者如果您绝对必须使用保留关键字,请将其括在方括号中,例如 [index]
猜你喜欢
  • 1970-01-01
  • 2021-07-03
  • 2014-02-28
  • 2017-12-18
  • 2012-01-20
  • 2014-06-23
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多