我想从表中返回最近的十(完整)行,但确保它们都具有唯一的'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
这似乎可以解决问题。以为我会在这里发布它,以防它对别人有用,或者有人可能发现任何错误!
答案 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}的所有组合。