【问题标题】:How to select distinct rows with a specified condition如何选择具有指定条件的不同行
【发布时间】:2012-12-02 07:55:35
【问题描述】:

假设有一张桌子

_ _
a 1
a 2
b 2
c 3
c 4
c 1
d 2
e 5
e 6

如何选择每个组的所有行的不同最小值?

所以这里的预期结果是:

_ _
a 1
b 2
c 1
d 2
e 5

编辑

我的实际表包含更多列,我想全部选择它们。这些行仅在最后一列(示例中的第二列)中有所不同。我是 SQL 新手,可能我的问题在初始视图中格式不正确。

实际的架构是:

| day | currency ('EUR', 'USD') | diff (integer) | id (foreign key) |

它们是重复的对 (day, currency),它们之间的差异 (diff, id)。我想从原始表中看到一个具有唯一对 (day, currency) 和最少 diff 的表。

谢谢!

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    在你的情况下就这么简单:

    select column1, min(column2) as column2
    from table
    group by column1
    

    对于两个以上的专栏,我可以建议:

    select top 1 with ties
        t.column1, t.column2, t.column3
    from table as t
    order by row_number() over (partition by t.column1 order by t.column2)
    

    看看这个帖子https://stackoverflow.com/a/13652861/1744834

    【讨论】:

    • 我尝试了这种方法(除了我的实际表包含更多列),但它只给了我所有行
    • 好吧,这种方法适用于两列。我将在一秒钟内为两列以上添加我最喜欢的方法
    • @Andrew 你能用你的实际架构和你想要选择的所有行更新你的原始帖子吗?
    • @Andrew 你想看到什么作为查询的结果?
    【解决方案2】:

    您可以使用排名函数ROW_NUMBER() 对 CTE 执行此操作。特别是,如果除了这两列之外还有更多的列,它会给出如下的 distict 值:

    ;WITH RankedCTE
    AS
    (
       SELECT *, ROW_NUMBER() OVER(PARTITION BY column1 ORDER BY Colmn2 ) rownum
       FROM Table
    )
    SELECT column1, column2
    FROM RankedCTE
    WHERE rownum = 1;
    

    这会给你:

    COLUMN1   COLUMN2
       a         1
       b         2
       c         1
       d         2
       e         5
    

    SQL Fiddle Demo

    【讨论】:

    • 这对他的用例来说太过分了。
    • @DigitalD 我想添加这条评论,但后来发现 OP 有超过 2 列,所以这种方法实际上对他有用
    • @RomanPekar 我现在明白了。他最初没有指定该信息
    【解决方案3】:

    选择 ColOne,Min(ColTwo) 从表 由 ColOne 分组 由 ColOne 订购

    PS:不是机器前面,但请在上面试一试。

    【讨论】:

      【解决方案4】:
      select MIN(col2),col1
      from dbo.Table_1
      group by col1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-24
        • 1970-01-01
        • 2011-03-31
        • 1970-01-01
        • 1970-01-01
        • 2015-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多