Mysql查询组通过错误的时间戳

时间:2013-10-04 05:10:35

标签: php mysql sql greatest-n-per-group

我有一个查询,执行时会给我这样的结果

speciaid         | title     | date
one              | xxx       | 2013-10-03 02:13:54
one              | xxx       | 2013-10-03 03:13:54
two              | yyy       | 2013-10-02 02:13:54

现在,如果我添加GROUP BY specialid,它会被分组,但我得到的日期是旧日期,而不是像这样的“日期”列的新日期

speciaid         | title     | date
one              | xxx       | 2013-10-03 02:13:54      // old date selected for entry one
two              | yyy       | 2013-10-02 02:13:54

我希望它像这样

speciaid         | title     | date
one              | xxx       | 2013-10-03 03:13:54   // new date for entry one needed
two              | yyy       | 2013-10-02 02:13:54

我尝试了很多小组 - 我得到了相同的结果。如果有人帮助查询群组,我会非常感激。

3 个答案:

答案 0 :(得分:0)

您正在寻找最佳的每组解决方案。

通常以这种方式解决(假设您的结果是表格,因为问题中缺少信息)。

选项1:

SELECT * FROM t JOIN (
  SELECT title, max(`date`) `date` FROM t
  GROUP BY title
) s ON t.title = s.title AND t.`date` = s.`date`

选项2:

SELECT t1.* FROM t t1
LEFT JOIN t t2
ON t1.title = t2.title AND t1.`date` < t2.`date`
WHERE t2.`date` IS NULL

工作小提琴:http://sqlfiddle.com/#!2/76f2d3/1

答案 1 :(得分:0)

如果您想从分组列中获取第一个/最后一个日期,则需要使用max()或min()分组函数。

SELECT speciaid, title, MAX(`date`) FROM table GROUP BY title;

答案 2 :(得分:0)

select speciaid, title , date
from
(select * from table_name order by date desc) d
group by title