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

如何从门店预算表中获取各门店当月的最新记录?

解决门店当月最新预算记录查询问题

我明白你的需求啦——你现在的查询能筛选出指定门店当月的所有预算记录,但如果某个门店当月有多条记录,你只想保留最新的那一条。下面给你两种实用的解决方案:

方法一:使用窗口函数(推荐,适用于支持窗口函数的数据库如MySQL 8+、PostgreSQL、SQL Server等)

窗口函数ROW_NUMBER()可以帮我们给每个门店的当月记录按日期倒序排名,然后只取排名为1的那条(也就是最新的):

WITH ranked_budgets AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY store ORDER BY Date DESC) AS rn
    FROM table_budget
    WHERE 
        store IN ([$STORE$]) 
        AND MONTH(Date) = MONTH(CURRENT_DATE()) 
        AND YEAR(Date) = YEAR(CURRENT_DATE())
)
SELECT * FROM ranked_budgets WHERE rn = 1;

代码解释:

  • PARTITION BY store:按门店分组,每组内单独排序
  • ORDER BY Date DESC:每组内按日期从新到旧排序,最新的记录会排第1
  • rn = 1:只保留每个门店组里排名第一的记录

方法二:分组关联法(兼容老版本数据库)

如果你的数据库不支持窗口函数,可以先找出每个门店当月的最新日期,再关联原表获取完整记录:

SELECT b.*
FROM table_budget b
INNER JOIN (
    SELECT 
        store,
        MAX(Date) AS latest_date
    FROM table_budget
    WHERE 
        store IN ([$STORE$]) 
        AND MONTH(Date) = MONTH(CURRENT_DATE()) 
        AND YEAR(Date) = YEAR(CURRENT_DATE())
    GROUP BY store
) latest ON b.store = latest.store AND b.Date = latest.latest_date
WHERE 
    b.store IN ([$STORE$]) 
    AND MONTH(b.Date) = MONTH(CURRENT_DATE()) 
    AND YEAR(b.Date) = YEAR(CURRENT_DATE());

代码解释:

  • 子查询先按门店分组,找出每个门店当月的最大(最新)日期
  • 然后通过门店和日期关联原表,得到每个门店最新日期对应的完整记录

另外小提示:如果Date字段是带时间的datetime类型,两种方法都能正常工作,因为MAX(Date)和ORDER BY Date DESC都会考虑时间部分哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:37:54