如何使用group by只获取一行

时间:2013-10-03 23:41:24

标签: mysql greatest-n-per-group

我有这个问题:

  SELECT
  Max(l.created) AS created,
  l.unit_id,
  l.activity_id AS Active
  FROM unit_log AS l
  GROUP BY l.unit_id, l.activity_id

我需要和似乎无法获得的是每个unit_id的MAX()行。我在查询中需要unit_id,因为我正在加入另一个表。创建的列是时间戳。

每个unit_id将有数百个条目。我所关心的是每个单元最近的一个。有人能告诉我为什么这不起作用吗?

2 个答案:

答案 0 :(得分:3)

SELECT l.unit_id, l.created, l.activity_id
FROM unit_log l
JOIN (SELECT unit_id, MAX(created) AS maxc
      FROM unit_log
      GROUP BY unit_id) m
ON l.unit_id = m.unit_id AND l.created = m.maxc

答案 1 :(得分:0)

只要每个unit_id只有一个activity_id,您的查询就可以正常工作。正如它所写,它将为每个活动ID每单位提供一行。

也许你需要:

选择   创建了Max(l.created)AS,   l.unit_id   FROM unit_log AS l   WHERE.activity_id = 1 - 或者表示活动的任何内容   GROUP BY l.unit_id,l.activity_id