【问题标题】:Select top distinct products based on a distinct column根据不同的列选择最重要的不同产品
【发布时间】:2011-09-11 13:43:29
【问题描述】:

我想编写一个 sql server 2008 查询,该查询按按照下表发布的最新日期排序的品牌 ID 选择最重要的不同产品:

dbo.Products
ProductId, BrandId, PublishedOn

表格内容:

1, 1, 2011-01-01
2, 2, 2011-01-01
3, 3, 2011-01-01
4, 1, 2011-01-09
5, 1, 2011-01-10
6, 2, 2011-01-10

我追求的输出是:

6, 2, 2011-01-10
5, 1, 2011-01-10
3, 3, 2011-01-01

有人知道如何实现吗?

抱歉,如果标题不正确,但我不知道如何表达这个。

【问题讨论】:

    标签: sql-server sql-server-2008 greatest-n-per-group


    【解决方案1】:

    您似乎想要每个 BrandId 的最新行,按 PublishedOn 的顺序排列?

    ;WITH T
         AS (SELECT *,
                    ROW_NUMBER() OVER (PARTITION BY BrandId 
                                           ORDER BY PublishedOn DESC) AS RN
             FROM   dbo.Products)
    SELECT ProductId,
           BrandId,
           PublishedOn
    FROM   T
    WHERE  RN = 1  
    

    【讨论】:

    • 谢谢您,先生。我不认为你能告诉我关于开始分号的机会吗?
    • @SF - 如果您将其粘贴到不以分号结尾的现有代码块中,这只是为了预先排除您会得到的错误。前面的语句必须以分号结束。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 2014-03-11
    • 2015-07-25
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    相关资源
    最近更新 更多