GROUP BY返回整行

时间:2011-04-27 11:05:44

标签: sql group-by

我想从表中返回最近的十(完整)行,但确保它们都具有唯一的'alternate_id'。如果前十名中有两个有相同的alternate_id我不关心我采取哪一个,但我想要其中一个!我以为我会按照以下方式使用group:

select * 
from track_history_items 
where type='FooType' 
group by alternate_id order by created_at desc limit 10;

但这似乎导致了问题(无法返回具有明确位于前10名的alternate_ID的行)。有什么想法我应该如何正确地做到这一点?

*解决方案 * (因为我是新用户,我无法发布答案)

这就是我最终做的事情:

SELECT field1,
...,
max(created_at),
...,
fieldN
FROM track_history_items
where type='FooType'
group by alternate_id
order by created_at desc
limit 10

这似乎可以解决问题。以为我会在这里发布它,以防它对别人有用,或者有人可能发现任何错误!

1 个答案:

答案 0 :(得分:0)

GROUP BY必须与聚合函数一起使用(例如sum,avg,...)。

您可以使用:

SELECT
  DISTINCT alternate_id,
  field1, -- one value per alternate_id
  ...,    -- one value per alternate_id
  fieldn  -- one value per alternate_id
FROM
  track_history_items
WHERE
  type = 'FooType'
ORDER BY
  created_at DESC
LIMIT 10

这是标准的SQL。

这并不意味着您在alternat_id列中必然具有唯一值。您将拥有{alternate_id,fieldi}的所有组合。