【问题标题】:SQL query to get greatest distinct date - kind ofSQL查询以获得最大的不同日期 - 一种
【发布时间】:2010-09-22 14:56:43
【问题描述】:

我有两个表:articles 和 articletags

articles: id, author, date_time, article_text
articletags: id, tag

(article.id == articletags.id in a many-to-many relationship)

我是在最后一次在每个标签下发布某些内容之后。换句话说,对于每个标签,查看与其相关的所有文章并找到最新的并返回。

例如 文章:

1, me, 12 Nov, Sometext
2, me, 13 Nov, Sometext
3, me, 14 Nov, Sometext

文章标签

1, foo
1, bar
2, foo
3, bar

我想回来:

foo, 13 Nov
bar, 14 Nov

我可以达到内部连接,然后被难住了。我不认为 DISTINCT 子句是我所追求的,而且我对子查询还不够熟悉,无法知道这是否有帮助。

SELECT date_time, tag 
FROM articles, articletags
WHERE articles.id = articletags.id 

这可能吗?

【问题讨论】:

    标签: sql mysql


    【解决方案1】:
    select t.tag, max(a.date_time) as latest
    from articles a
    inner join articletags t
    on t.id = a.id
    group by t.tag
    

    【讨论】:

      【解决方案2】:
      SELECT date_time, tag 
      FROM articles, articletags
      WHERE articles.id = articletags.id
      ORDER BY date_time DESC
      GROUP BY tag
      

      【讨论】:

      • 这实际上最终返回了最旧的记录,而不是最新的。这是它出现的默认行为,因此它需要像 Gorden Bell 的解决方案那样的 max 子句。其次,如果您使用的是 MySQL,则需要交换 Order By 和 Group by 以使其正常工作。我不知道为什么,但你知道。
      • @Hyposaurus:SQL 标准说 GROUP BY 在 ORDER BY 之前。
      • @SoapBox:问题在于它返回每个标签的所有行,而不仅仅是最大日期行。
      猜你喜欢
      • 2017-09-20
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      相关资源
      最近更新 更多