查询 return SQL 列的第一个结果?
Query to return first result of a column in SQL?
在 SQL 中,是否有一种简单的方法可以 return 列中包含某个值的顶级实例的所有行?
鉴于下面的 table...
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
我想return...
Size Color Price
S Red 1
M Olive 45
L Purple 4
您可以尝试 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
您需要对数据进行分区以获得分配给每个分区大小的行数,然后以第一个分区为准,结果如下
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
在 SQL 中,是否有一种简单的方法可以 return 列中包含某个值的顶级实例的所有行?
鉴于下面的 table...
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
我想return...
Size Color Price
S Red 1
M Olive 45
L Purple 4
您可以尝试 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
您需要对数据进行分区以获得分配给每个分区大小的行数,然后以第一个分区为准,结果如下
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