【问题标题】:SQL Server Select DistinctSQL Server 选择不同的
【发布时间】:2011-02-20 18:33:30
【问题描述】:

我想写一个这样的查询:

对于包含这些列的表: ColA ColB ColC, ColD

先选择(ColA、ColB、ColC、ColD) 不同(ColB,ColC) 从表 冷门下单

查询应该按 ColD 对表进行排序,然后通过 ColB 和 ColC 的组合对结果进行分组(它们可能具有不同的数据类型)并返回组中的第一行(包含表的所有列) .

如何在 MS SQL Server 2005 中实现?

【问题讨论】:

    标签: sql sql-server join group-by distinct


    【解决方案1】:

    听起来你想要“每组最大”。

    一种方法是使用开窗函数ROW_NUMBER对每组中的行进行编号,然后只选择行号为1的行:

    SELECT ColA, ColB, ColC, ColD
    FROM
    (
        SELECT
             ColA, ColB, ColC, ColD,
             ROW_NUMBER(PARTITION BY ColB, ColC ORDER BY ColD) AS rn
        FROM table1
    ) T1
    WHERE rn = 1
    

    【讨论】:

    • +1 - 我的输入基本相同。排名功能被低估了。 ;-)
    最近更新 更多