首页 > 解决方案 > 在两个表之间的数据比较中查找最新值

问题描述

我的数据库中有 2 个表,我想比较我对每个表所做的 2 个选择查询的值

表 1:click_log

查询表一:

SELECT *
FROM click_log

表 2:km_articles

查询表2:

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"

我要比较的列是带有 km_article_no 的表 1 的表 link_clicked,我知道我会找到重复匹配,但是从这些重复匹配中我想找到我想从表 1 中名为“when_clicked”的另一列中获得的最新匹配包含数据信息,不确定如何将这些信息放在一起进行查询,然后缩小范围。

这就是表格的样子:

表格1:

|link_clicked|when_clicked
     KB00001 | 2017-08-02
     KB00001 | 2017-12-02
     KB00002 | 2017-08-02
     KB00002 | 2017-09-02
     KB00003 | 2017-09-02
     KB00003 | 2017-09-02

表 2:

km_article_no|km_article_ti|km_article_status|km_article_view_count|km_article_date
  KB00001 |outlook IOS | 发表 | 5 | 2017-01-02
  KB00002 |外观 CSS | 发表 | 4 | 2017-01-05
  KB00003 |展望中兴通讯 | 退休 | 3 | 2017-01-09

标签: mysqlsql

解决方案


如果我理解正确,您想显示所有km_articles行,每行都有最新的相关click_log.when_clicked日期。因此,汇总您的click_logperlink_clicked并找到最大值when_clicked。然后加入到km_articles.

select kma.*, cl.last_clicked
from km_articles kma
join
(
  select link_clicked, max(when_clicked) as last_clicked
  from click_log
  group by link_clicked
) cl on cl.link_clicked = kma.km_article_no
where kma.km_article_date <= date '2017-10-31'
  and kma.km_article_status = 'Published'
  and kma.km_article_view_count <= 5;

(如果您还想显示km_articles在 中不匹配的行,click_log则更join改为left join。)


推荐阅读