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

数据库两表对比:获取重复匹配结果中的最新值

解决重复匹配取最新值的关联查询方案

我来帮你搞定这个需求——你需要关联click_log和筛选后的km_articles记录,匹配link_clicked和km_article_no,还要从重复的匹配结果里提取最新的那条记录对吧?下面给你具体的实现思路和SQL代码:

核心思路

  • 先从km_articles里筛选出符合条件的文章编号(日期≤2017-10-31、状态为Published、浏览量≤5);
  • 将这些文章编号和click_log的link_clicked做关联;
  • 对每个匹配的文章编号分组,用排序函数标记出每组里的最新记录,最后只保留最新的那条。

具体SQL实现

假设click_log表中有一个用于判断“最新”的字段——比如记录点击时间的click_timestamp(如果你的表用的是自增ID比如click_id,替换成对应的字段即可),代码如下:

-- 第一步:筛选符合条件的文章编号
WITH filtered_articles AS (
    SELECT km_article_no
    FROM km_articles 
    WHERE km_article_date <= '2017-10-31' 
      AND km_article_status = 'Published' 
      AND km_article_view_count <= 5
),
-- 第二步:关联日志并给每组记录排名(最新的排第1)
ranked_clicks AS (
    SELECT 
        cl.*,
        ROW_NUMBER() OVER (
            PARTITION BY cl.link_clicked  -- 按匹配的文章号分组
            ORDER BY cl.click_timestamp DESC  -- 按点击时间倒序,最新的在前
        ) AS record_rank
    FROM click_log cl
    JOIN filtered_articles fa 
        ON cl.link_clicked = fa.km_article_no
)
-- 第三步:只保留每组排名第1的最新记录
SELECT * 
FROM ranked_clicks 
WHERE record_rank = 1;

关键细节说明

  • 关于“最新值”的判断:如果你的click_log没有时间戳字段,而是用自增ID来标识记录的先后顺序,只需要把ORDER BY cl.click_timestamp DESC改成ORDER BY cl.click_id DESC即可;
  • 自定义返回字段:如果不需要返回click_log的所有字段,把cl.*替换成你需要的具体字段(比如cl.link_clicked, cl.click_user, cl.click_timestamp);
  • 处理匹配范围:JOIN默认是INNER JOIN,会自动排除click_log中未匹配到目标文章编号的记录;如果需要保留这些未匹配记录,可以改成LEFT JOIN,但根据你的需求用INNER JOIN就足够了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:55:44