在 SQL Server 中,如果你想预测每个分组的 Top 5 记录,可以使用 ROW_NUMBER()
窗口函数结合 PARTITION BY
子句来实现。以下是一个示例,假设我们有一个名为 Sales
的表,其中包含 ProductID
、SaleDate
和 Amount
列,我们想要预测每个 ProductID
分组中金额最高的 5 笔交易。
WITH RankedSales AS (
SELECT
ProductID,
SaleDate,
Amount,
ROW_NUMBER() OVER (PARTITION BY ProductID ORDER BY Amount DESC) AS Rank
FROM
Sales
)
SELECT
ProductID,
SaleDate,
Amount
FROM
RankedSales
WHERE
Rank <= 5;
ROW_NUMBER()
函数为每个 ProductID
分组内的记录分配一个唯一的序号。PARTITION BY ProductID
表示按 ProductID
分组。ORDER BY Amount DESC
表示在每个分组内按 Amount
降序排列。Rank
,表示其在分组内的排名。RankedSales
CTE 中选择 Rank
小于等于 5 的记录。如果你需要更复杂的数理逻辑,例如基于某些条件的过滤或计算,可以在 CTE 中添加相应的逻辑。例如,假设我们只想考虑 Amount
大于某个阈值的记录:
WITH FilteredSales AS (
SELECT
ProductID,
SaleDate,
Amount
FROM
Sales
WHERE
Amount > 1000 -- 添加过滤条件
),
RankedSales AS (
SELECT
ProductID,
SaleDate,
Amount,
ROW_NUMBER() OVER (PARTITION BY ProductID ORDER BY Amount DESC) AS Rank
FROM
FilteredSales
)
SELECT
ProductID,
SaleDate,
Amount
FROM
RankedSales
WHERE
Rank <= 5;
在这个例子中,我们首先在 FilteredSales
CTE 中过滤出 Amount
大于 1000 的记录,然后在 RankedSales
CTE 中对这些过滤后的记录进行排名。
通过这种方式,你可以灵活地添加各种分组数理逻辑,以满足你的具体需求。
领取专属 10元无门槛券
手把手带您无忧上云