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

如何筛选订单对应的最早日志记录及关联用户名

解决每个订单对应最早日志日期的用户名问题

你的SQL代码之所以会返回每个订单的所有用户名,是因为最后关联dates表时,只匹配了order_id,没有同时匹配CTE里计算出的最早log_date,导致该订单下所有记录都被关联了出来。

下面提供两种可行的解决方法:

方法一:修正原CTE的关联条件

在最后关联dates表时,同时匹配order_id和log_date,精准定位到每个订单最早日期对应的用户:

with name as (
  select order_id, min(log_date) as log_date
  from dates
 group by order_id)

select o.order_num, d.user_name as username
from orders o 
inner join name n on o.id = n.order_id
inner join dates d on d.order_id = n.order_id AND d.log_date = n.log_date;

方法二:使用窗口函数(更灵活)

用ROW_NUMBER()窗口函数给每个订单的日志记录按日期排序,然后取排序为1的记录(即最早的那条):

with ranked_dates as (
  select 
    order_id, 
    user_name, 
    log_date,
    -- 按订单分组,日期升序排序,给每条记录标序号
    ROW_NUMBER() over (partition by order_id order by log_date asc) as rn
  from dates
)
select o.order_num, rd.user_name as username
from orders o
inner join ranked_dates rd on o.id = rd.order_id
where rd.rn = 1; -- 只保留每个订单最早的那条记录

如果遇到同一个订单有多条相同最早日期的记录,想要保留所有这类记录,可以把ROW_NUMBER()换成RANK()或者DENSE_RANK()。

内容的提问来源于stack exchange,提问作者Саят Оразов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:01:15