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

SQL查询获取最大日期:新手求助关联表取最新值

Hey there! Let's work through this SQL problem together—since you're new to SQL, I'll break it down clearly so you can follow along.

问题概述

你有两张表,需要关联后获取每个客户最新LOADED_DATE对应的VALUE:

客户表(Customer Table)

CUSTOMER IDCUSTOMER JOIN DATE
123401/03/2018
234521/07/2019

价值分段表(Value Segment)

CUSTOMER IDVALUELOADED_DATE
1234HIGH01/09/20
1234MEDIUM01/10/20
2345LOW01/09/20
2345LOW01/10/20

你需要返回的结果是每个客户的ID、加入日期,以及他们最新加载日期对应的价值分段。

解决方案:使用窗口函数(ROW_NUMBER())

这是最直观的方法之一,适合新手理解。我们先给Value Segment表的每条记录按客户分组,然后按LOADED_DATE倒序排名,排名为1的就是每个客户最新的那条记录,再和客户表关联即可。

WITH LatestValue AS (
    SELECT 
        CUSTOMER_ID,
        VALUE,
        LOADED_DATE,
        -- 按客户分组,加载日期降序,给每条记录排名
        ROW_NUMBER() OVER (PARTITION BY CUSTOMER_ID ORDER BY LOADED_DATE DESC) AS rn
    FROM Value_Segment
)
SELECT 
    c.CUSTOMER_ID,
    c.CUSTOMER_JOIN_DATE,
    lv.VALUE
FROM Customer_Table c
JOIN LatestValue lv ON c.CUSTOMER_ID = lv.CUSTOMER_ID
WHERE lv.rn = 1; -- 只取每个客户排名第一的(最新的)记录

代码解释

  1. CTE(Common Table Expression)LatestValue:我们先对价值分段表做处理,用ROW_NUMBER()函数给每个客户的记录排序——PARTITION BY CUSTOMER_ID表示按客户分组,ORDER BY LOADED_DATE DESC表示每组内按加载日期从新到旧排,这样最新的记录会得到rn=1。
  2. 关联客户表:把处理后的LatestValue表和客户表通过CUSTOMER_ID关联,筛选出rn=1的记录,就能得到每个客户最新的价值分段。

预期结果

CUSTOMER IDCUSTOMER JOIN DATEVALUE
123401/03/2018MEDIUM
234521/07/2019LOW

注意事项

如果你的LOADED_DATE字段是字符串类型(不是数据库的DATE/DATETIME类型),可能需要先转换为日期类型再排序,比如在MySQL里可以用STR_TO_DATE(LOADED_DATE, '%d/%m/%y'),在SQL Server里用CONVERT(DATE, LOADED_DATE, 3),确保排序逻辑正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:22:58