如何在MySQL GROUP BY中按日期返回第一条记录?

3

我在表格中有30条记录,它们的标题相同,但每个记录的编号和日期都不同。如何在查询中返回最近的日期?

表格长这样:

Id - Title - Date
-----------------
1 - africa - 2012-11-27
2 - africa - 2012-11-26
3 - africa - 2012-11-25

我需要一个查询,返回Id为3的最近日期的记录。所有我尝试使用GROUP BY的方法只返回了Id为1的记录。我该如何处理?


1
如果按照“日期”列来看,记录id=1id=3更“近”,对吗? - eggyal
最近的记录是ID为1的记录,所以也许你的查询已经返回了正确的结果。 - Paulo Pinto
3个回答

7
您想获取第一条记录,但这并不是最近的记录。子查询背后的思想是,它获取每个标题的第一个日期,并将其与自身连接,前提是标题和日期相匹配。
SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  title, MIN(DATE) minDate
            FROM tableName
            GROUP BY title
        ) b ON a.title = b.title AND
                a.date = b.maxDate

3

你想要分组最大值

SELECT * FROM my_table NATURAL JOIN (
  SELECT   Title, MAX(Date) Date
  FROM     my_table
  GROUP BY Title
) t

sqlfiddle上查看。

如果您将“最近”定义为具有最高id的内容,而不是具有最新Date的内容:

SELECT * FROM my_table NATURAL JOIN (
  SELECT   Title, MAX(id) id
  FROM     my_table
  GROUP BY Title
) t

sqlfiddle上查看。


这不会返回每个标题最近记录的ID,我认为这是OP想要的。 - Alexey Feldgendler
@AlexeyFeldgendler:是的,它会。 - eggyal

1

我会做一些像这样简单的事情

SELECT
Id as Id,
MAX(Date) as Date
FROM NameOfYourTable 
GROUP BY Id

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接