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

如何在MySQL中查询按年月分组的商品最近5条唯一价格记录

你现有语句的问题在于 SELECT DISTINCT 仅会对monthyear、itemname、rate三个字段完全相同的记录去重,既没有按时间排序逻辑,也没有筛选最近记录的规则,因此无法得到预期结果。

以下是通用可行的查询方案,默认你使用的数据库支持窗口函数(MySQL 8.0+、PostgreSQL、SQL Server、Oracle 均支持),且表中存在精确的交易时间字段txn_date(用于区分同月内多条价格记录的先后顺序,若无该字段可调整为你实际的排序字段):

方案1:按商品维度取每个商品最近5组价格记录(同月调价多条全部保留)

WITH ranked_transaction AS (
    SELECT 
        monthyear,
        itemname,
        rate,
        -- 按商品分组,按交易时间倒序排名,相同月份的记录排名一致
        DENSE_RANK() OVER (PARTITION BY itemname ORDER BY monthyear DESC, txn_date DESC) AS rank_num
    FROM av_products_txn
)
SELECT monthyear, itemname, rate
FROM ranked_transaction
WHERE rank_num <= 5
ORDER BY itemname, monthyear DESC, txn_date DESC;

方案2:全局取所有商品的最近5条价格记录

如果不需要按商品分组,仅需要全局按时间倒序取最近5条,直接排序后限制条数即可:

-- MySQL/PostgreSQL 写法
SELECT monthyear, itemname, rate
FROM av_products_txn
ORDER BY txn_date DESC
LIMIT 5;

-- SQL Server 写法
SELECT TOP 5 monthyear, itemname, rate
FROM av_products_txn
ORDER BY txn_date DESC;

-- Oracle 写法
SELECT monthyear, itemname, rate
FROM av_products_txn
WHERE ROWNUM <= 5
ORDER BY txn_date DESC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:57:01