Как выбрать запись, содержащую MAX (some_field) внутри GROUP (group by) - PullRequest
2 голосов
/ 13 апреля 2010
SELECT MAX(some_field) FROM table_A GROUP BY another_field

Это получает только максимальное значение 'some_field'; Я хочу получить всю запись, которая содержит MAX(some_field).

Ответы [ 3 ]

6 голосов
/ 13 апреля 2010
select a.*
from table_A a
inner join (
    SELECT another_field, MAX(some_field) as MaxSomeField
    FROM table_A 
    GROUP BY another_field
) am on a.another_field = am.another_field and a.some_field = am.MaxSomeField
4 голосов
/ 13 апреля 2010
SELECT
  *
FROM
  table_A
  INNER JOIN (
      SELECT MAX(some_field) AS some_field, another_field
        FROM table_A
    GROUP BY another_field
  ) AS max ON table_A.some_field    = max.some_field
          AND table_A.another_field = max.another_field

Обратите внимание, что вы получите несколько строк another_field, если MAX(some_field) не является уникальным значением в этой группе. Вы должны сгруппировать выше снова , чтобы избавиться от этих «дубликатов».

1 голос
/ 13 апреля 2010
Select * From table_A withMax Where Not Exists
    (Select * From table_A Where some_field > withMax.some_field)

Обычно вы будете делать это с некоторыми другими критериями, и вы захотите проверить наличие дубликатов, поэтому реалистичный пример больше похож на этот:

Select * From table_A withMax Where account_id = 1234 Not Exists
    (
    Select * 
    From table_A 
    Where account_id = withMax.account_id And 
        (
        some_field > withMax.some_field
        Or (some_field = withMax.some_field And id > withMax.id)
        )
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...