GROUP BY, чтобы вернуть всю строку - PullRequest
0 голосов
/ 27 апреля 2011

Я хочу вернуть последние десять (полных) строк из таблицы, но при этом убедиться, что все они имеют уникальные 'alternate_id'.Если в первой десятке есть два человека с одинаковым alternate_id, мне все равно, какой я возьму, но я хочу один из них!Я думал, что буду использовать group by следующим образом:

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

, но это, кажется, вызывает проблемы (не удается вернуть строки с alternate_ids, которые определенно находятся в топ-10).Любые идеи, как я должен сделать это правильно?

* РЕШЕНИЕ * (я не могу опубликовать ответ, поскольку я 'я новый пользователь)

вот что я в итоге сделал:

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 голосов
/ 27 апреля 2011

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}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...