Выборка одной записи из группы

Есть у меня таблица, в которой среди прочих полей есть поля id (PK), freq, sth_code, level.

Теперь мне нужно вытащить те пары (freq, sth_code), которые встречаются более 100 раз и вытащить для них по одной записи с максимальным уровнем.

Что-то тип такого

SELECT
  s.*
FROM
  (
    SELECT
      s.`freq`,
      s.`stn_code`,
      MAX(s.`level`) AS `level`
    FROM
      mytable s
    WHERE
      s.`time` > CURRENT_DATE
    GROUP BY
      s.`freq`,
      s.`stn_code`
    HAVING
      COUNT(*) >= 100
  ) sub
  LEFT JOIN mytable s ON (
    s.`freq` = sub.`freq` AND
    s.`stn_code` = sub.`stn_code` and
    s.`level` = sub.`level`
  )

Проблема в том, что тройка (freq, sth_code, level) не уникальна и в базе может быть несколько записей с максимальным уровнем. Из этих нескольких записей (если они есть) мне нужно достать ровно одну любую.

Вопрос о производительности не стоит.


Ответы (1 шт):

Автор решения: Anton Shchyrov

Получился такой монстр

SELECT
  s.*
FROM
  (
    SELECT
      MAX(s.`id`) AS `id`
    FROM
      (
        SELECT
          s.`freq`,
          s.`stn_code`,
          MAX(s.`level`) AS `level`
        FROM
          mytable s
        WHERE
          s.`time` > CURRENT_DATE
        GROUP BY
          s.`freq`,
          s.`stn_code`
        HAVING
          COUNT(*) >= 100
      ) sub
      LEFT JOIN mytable s ON (
        s.`freq` = sub.`freq` AND
        s.`stn_code` = sub.`stn_code` and
        s.`level` = sub.`level`
      )
    GROUP BY
      s.`freq`,
      s.`stn_code`
  ) sub2
  LEFT JOIN mytable s ON (sub2.`id` = s.`id`)
→ Ссылка