Как выделить всю последнюю строку некоторой области видимости столбца в MySQL - PullRequest
0 голосов
/ 19 ноября 2011

Мне нужен запрос для выбора последних строк некоторой области столбца.

Пример, вся таблица:

----------------------
| ID | NAME | FOO_ID |
|--------------------|
| 1  | jQue |   2    |
| 2  | Prot |   2    |
| 3  | Node |   2    |
| 4  | Moo  |   1    |
| 5  | Scri |   1    |
----------------------

Строки, возвращаемые запросом, которые возвращают все «последние строки»"в FOO_ID поле столбца:

----------------------
| ID | NAME | FOO_ID |
|--------------------|
| 3  | Node |   2    |
| 5  | Scri |   1    |
----------------------

Может ли кто-нибудь помочь мне в кодировании этого запроса?

Ответы [ 2 ]

2 голосов
/ 19 ноября 2011
SELECT a.* 
FROM table_1 a
INNER JOIN (SELECT foo_id, max(id) as max_id FROM table_1 GROUP BY foo_id)b
ON b.max_id = a.id
1 голос
/ 19 ноября 2011

Я бы использовал тот из них, который вы найдете наиболее понятным:

  • Запрос a1ex07

или

SELECT *
  FROM the_table
 WHERE id IN
        ( SELECT MAX(id)
            FROM the_table
           GROUP
              BY foo_id
        )
;

или

SELECT *
  FROM the_table a
 WHERE NOT EXISTS
        ( SELECT 1
            FROM the_table b
           WHERE b.foo_id = a.foo_id
             AND b.id > a.id
        )
;

или

SELECT a.*
  FROM the_table a
  LEFT
 OUTER
  JOIN the_table b
    ON b.foo_id = a.foo_id
   AND b.id > a.id
 WHERE b.id IS NULL
;

(Я предпочитаю версию с IN, но вы можете чувствовать по-другому.)

...