You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server查询中获取商品的最新价格

在SQL Server中实现Access里LAST()函数的分组取最新价格功能

SQL Server没有Access中那种直接可用的LAST()聚合函数,但可以通过以下几种实用方法实现「按商品分组,获取最新价格」的需求:


方法1:使用窗口函数ROW_NUMBER()(推荐)

这是最灵活、兼容性最好的方案,适合绝大多数场景。核心思路是给每个商品的记录按「最新顺序」编号,再筛选出每组内编号为1的记录。

WITH RankedItems AS (
    SELECT 
        code,
        name,
        prices,
        -- 按商品分组,按记录的"最新"顺序编号
        ROW_NUMBER() OVER (
            PARTITION BY code, name 
            ORDER BY (SELECT NULL) DESC -- 模拟Access LAST()的物理存储顺序
            -- 实际业务中建议替换为明确的排序字段,比如价格更新时间:
            -- ORDER BY price_update_time DESC
        ) AS rn
    FROM Items
)
SELECT code, name, prices
FROM RankedItems
WHERE rn = 1;

注意:如果你的表有price_update_time(价格更新时间)或create_time(记录创建时间)这类字段,一定要用它来排序,这样才能保证拿到的是业务逻辑上的最新价格,而非物理存储的随机最后一条。


方法2:使用TOP 1 WITH TIES(简洁版)

适合简单场景,语法更紧凑:

SELECT TOP 1 WITH TIES
    code,
    name,
    prices
FROM Items
ORDER BY ROW_NUMBER() OVER (
    PARTITION BY code, name 
    ORDER BY (SELECT NULL) DESC
    -- 同样建议替换为业务排序字段,比如ORDER BY price_update_time DESC
);

TOP 1 WITH TIES会返回所有排序后排名第一的记录,配合窗口函数实现分组取最新的效果。


方法3:关联子查询(适配旧版SQL Server)

如果使用的是SQL Server 2008及以前不支持窗口函数的版本,可以用子查询先定位每组的最新记录标识,再关联原表获取数据:

SELECT i.code, i.name, i.prices
FROM Items i
INNER JOIN (
    -- 假设表有自增主键id,通过MAX(id)定位最新插入的记录
    SELECT code, name, MAX(id) AS latest_id
    FROM Items
    GROUP BY code, name
) latest 
ON i.code = latest.code 
AND i.name = latest.name 
AND i.id = latest.latest_id;

内容的提问来源于stack exchange,提问作者Aso Salih

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 10:36:23