SQL - 获取上一个评论日期的文章标题

时间:2010-05-26 22:32:33

标签: sql join greatest-n-per-group

我有文章表,article_comments。

我想获得值:last_modified_all的文章。我需要这个值才是这两个人的好日子:

  1. 文章表格的last_modified字段。
  2. article_comments last_modified column的最后评论。
  3. 有人能帮助我吗?结构很简单,你可以猜测是没有问题的。

1 个答案:

答案 0 :(得分:1)

这是Stack Overflow上经常出现的最大n组问题。以下是我如何解决它:

SELECT a.article_id, a.last_modified, c1.last_modified AS last_comment_date
FROM articles AS a
JOIN article_comments AS c1
 ON (a.article_id = c2.article_id)
LEFT OUTER JOIN article_comments AS c2
 ON (a.article_id = c2.article_id AND c1.last_modified < c2.last_modified)
WHERE c2.article_id IS NULL;

除非article_comments.last_modified是唯一的,否则每篇文章都有可能产生多行。要解决此问题,请使用决胜局。例如,如果有一个自动递增的主键列:

SELECT a.article_id, a.last_modified, c1.last_modified AS last_comment_date
FROM articles AS a
JOIN article_comments AS c1
 ON (a.article_id = c2.article_id)
LEFT OUTER JOIN article_comments AS c2
 ON (a.article_id = c2.article_id AND (c1.last_modified < c2.last_modified
     OR c1.last_modified = c2.last_modified AND c1.comment_id < c2.comment_id))
WHERE c2.article_id IS NULL;