在使用SQL的GROUP BY
子句时,通常会选择分组后的聚合值,如SUM()
、AVG()
、MIN()
、MAX()
等。如果你想要选择每个分组中的最后一个值,可以使用窗口函数(如果你的数据库支持)来实现。
ROW_NUMBER()
,但如果有多个相同的值,则会跳过序号。RANK()
,但不会跳过序号。假设我们有一个名为sales
的表,包含product
, sale_date
, 和amount
列,我们想要获取每个产品的最后一次销售金额。
WITH RankedSales AS (
SELECT
product,
sale_date,
amount,
ROW_NUMBER() OVER (PARTITION BY product ORDER BY sale_date DESC) AS rn
FROM sales
)
SELECT product, sale_date, amount
FROM RankedSales
WHERE rn = 1;
RankedSales
。product
分组的行按sale_date
降序分配一个序号。如果你在使用窗口函数时遇到性能问题,可以考虑以下几点:
sale_date
列上有索引,以提高排序效率。product
进行分区。通过这种方式,你可以有效地选择每个分组中的最后一个值,同时保持查询的高效性。
领取专属 10元无门槛券
手把手带您无忧上云