Sql 获取符合特定条件的类别中的最后一项

Sql 获取符合特定条件的类别中的最后一项,sql,mysql,join,Sql,Mysql,Join,假设我有一个包含两个表的数据库:categories和articles。每一件物品都属于一个类别 现在,让我们假设我想要获取每个类别中符合特定标准的最新文章,如下所示:文章符合。如果没有额外的标准,我可以只添加一个名为last_article_id的列或类似于categories表的列,即使这不会被正确规范化 但是我怎么做呢?我假设有一些东西使用GROUP BY和HAVING?如果您向我们提供表格模式,我们可以更具体一点,但您可以尝试以下方法: 如果您向我们提供表模式,我们可以更具体一点,但您可

假设我有一个包含两个表的数据库:categories和articles。每一件物品都属于一个类别

现在,让我们假设我想要获取每个类别中符合特定标准的最新文章,如下所示:文章符合。如果没有额外的标准,我可以只添加一个名为last_article_id的列或类似于categories表的列,即使这不会被正确规范化


但是我怎么做呢?我假设有一些东西使用GROUP BY和HAVING?

如果您向我们提供表格模式,我们可以更具体一点,但您可以尝试以下方法:


如果您向我们提供表模式,我们可以更具体一点,但您可以尝试以下操作:


假设articles表中的id总是表示不断增加的数字,这应该是可行的。使用id在语义上是不正确的,IMHO,如果有时间/日期tamp字段,您应该实际使用它

SELECT * FROM articles WHERE article_id IN
  (
    SELECT 
      MAX(article_id) 
    FROM
      articles 
    WHERE [your filters here]
    GROUP BY 
      category_id
  )

假设articles表中的id总是表示不断增加的数字,这应该是可行的。使用id在语义上是不正确的,IMHO,如果有时间/日期tamp字段,您应该实际使用它

SELECT * FROM articles WHERE article_id IN
  (
    SELECT 
      MAX(article_id) 
    FROM
      articles 
    WHERE [your filters here]
    GROUP BY 
      category_id
  )
尝试:

   SELECT * 
     FROM categories AS c
LEFT JOIN (SELECT * FROM articles ORDER BY id DESC) AS a
       ON c.id = a.id_category
      AND /criterias about joining/
    WHERE /more criterias/
 GROUP BY c.id
尝试:

   SELECT * 
     FROM categories AS c
LEFT JOIN (SELECT * FROM articles ORDER BY id DESC) AS a
       ON c.id = a.id_category
      AND /criterias about joining/
    WHERE /more criterias/
 GROUP BY c.id

没有子查询就没有办法了吗?看@chris:看起来很不错。我应该补充一点,其他答案看起来也很不错。这也是非常深入的;没有子查询就没有办法了吗?看@chris:看起来很不错。我应该补充一点,其他答案看起来也很不错。这也是非常深入的;这与我的解决方案最接近,除了我在子查询中添加了一些过滤器(当它们引用文章时)。这与我的解决方案最接近,除了我在子查询中添加了一些过滤器(当它们引用文章时)。