sql仅返回每个id的最大日期

时间:2013-06-30 15:43:17

标签: mysql sql

我有一个数据库,其中一个表看起来像这样

Books(id, title, author_id, date)

我在日期字段中使用DATE类型。

查询要做的是仅返回每位作者的最新书籍,因此即使对于具有相同author_id的书籍,也只返回具有该作者最新日期字段的书籍。因此,对于所有书籍,每个作者都会找到最新的书籍,返回标题,author_id和日期。

我相信我需要将MAX函数与GROUP BY author_id ....一起使用,或者可能包含一个HAVING max(日期)?一个侧面注释是否可以在返回日期时将它的年龄提高到1个小数点? (如果预订日期超过3年,则为3.1)。

5 个答案:

答案 0 :(得分:4)

您可以使用此查询:

SELECT *
FROM Books
WHERE (author_id, date) IN (SELECT author_id, MAX(date)
                            FROM Books
                            GROUP BY author_id)

子查询将为每个作者返回一本书的最大日期。外部查询将返回具有最大日期的每位作者的所有书籍。

请注意,如果每位作者以相同的最长日期发布,这可能会为多位作者返回多本书。

答案 1 :(得分:1)

SELECT b1.*
FROM Books b1
JOIN (
    SELECT author_id, MAX(date) date
    FROM Books
    GROUP BY author_id
) b2
  ON b2.author_id = b1.author_id
 AND b2.date = b1.date

demo

答案 2 :(得分:0)

使用: -

SELECT id,title,author_id,date
FROM Books t1
WHERE t1.id = (SELECT t2.id
              FROM Books t2
              WHERE t2.author_id = t1.author_id
              ORDER BY t2.date desc
              LIMIT 1)

此查询将返回每位作者的最新书籍。

选中此项: - SQL FIDDLE

答案 3 :(得分:0)

查询:

SELECT b.*
FROM Books b
WHERE b.id = (SELECT b2.id
              FROM Books b2
              WHERE b2.author_id = b.author_id
              ORDER BY b2.date desc
              LIMIT 1)

答案 4 :(得分:0)

在SQL-Server上,我会写这样的内容来查找每个作者的最新日期:

Select author_id, Max(date) From Books Group By author_id

然后,您可以使用此修改作为子查询来查找每位作者的最新书籍:

Select B.* from Books as B
where B.date = (Select Max(date) From Books B2 where B2.author_id = B.author_id)

对于MySQL,我不确定这是否可行但可能会有效。当然,还有其他方法可以做到这一点。