2012-11-25 76 views
-1

我在表中有30个记录标题相同,但每个记录都有不同的ID和日期。如何在日期最近的查询中返回?如何在MySQL GROUP BY中返回DATE的第一条记录?

表看起来是这样的:

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 = 1'比'id = 3'更“近”? – eggyal

+0

最近的记录是Id 1的记录,所以也许您的查询返回正确的结果。 –

回答

2

您想获得第一条记录,但这不是最近的。子查询背后的想法是,它获得每个标题的第一个日期,并将其与自身相加,只要它与标题和日期匹配即可。

SELECT a.* 
FROM tableName a 
     INNER JOIN 
     (
      SELECT title, MIN(DATE) minDate 
      FROM tableName 
      GROUP BY title 
     ) b ON a.title = b.titleAND 
       a.date = b.maxDate 
+0

非常棒。谢谢! – dvd

2

你想要groupwise maximum

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

+0

这不会返回每个标题的最近记录的标识,我认为这是OP的要求。 –

+0

@AlexeyFeldgendler:是的,它会的。 – eggyal