查询以返回SQL中列的第一个结果?

时间:2019-10-10 19:42:31

标签: sql sql-server ssms

在SQL中,是否有一种简单的方法来返回包含一列中值的最高实例的所有行?

给出下表...

Size    Color    Price
S       Red      1
S       Green    4
S       Blue     7
M       Olive    45
M       Black    99
M       Orange   153
L       Purple   4
L       Red      75
L       Blue     98

我想回来...

Size    Color    Price
S       Red      1
M       Olive    45
L       Purple   4

2 个答案:

答案 0 :(得分:3)

您可以尝试使用CTE函数和ROW_NUMBER()来完成此操作:

这完成了您在评论中所说的 下降

;WITH CTE AS(
    SELECT myTable.*
    , RN = ROW_NUMBER()OVER(PARTITION BY Size ORDER BY Price DESC)
    FROM myTable 
)
SELECT Size, Color, Price FROM CTE
WHERE RN = 1

这可以达到您想要的结果:

;WITH CTE AS(
    SELECT myTable.*
    , RN = ROW_NUMBER()OVER(PARTITION BY Size ORDER BY Price ASC)
    FROM myTable 
)
SELECT Size, Color, Price FROM CTE
WHERE RN = 1
ORDER BY
  CASE Size
    WHEN 'S' THEN 1
    WHEN 'M' THEN 2
    WHEN 'L' THEN 3
  END

这里有一个示例SQL FIDDLE,因此您可以观看演示。

受以下因素影响:Select the first instance of a record

答案 1 :(得分:-1)

您需要对数据进行分区,以获取分配给每个分区大小的行数,然后取第一个分区,如下所示

     Select size, color, price from
         (Select Size, Color,Price, 
         row_number() 
        over (partition by size order by 
             Price) as rn
       from mytable) t where t.rn =1