2013-03-14 5 views
2

Допустим, мы имеем эту таблицу с именем таблицыMySQL - Как получить последнее значение строки, сгруппированное по определенному полю?

id   foreign_id value 
1    1   x 
2    2   y 
3    1   y 
4    2   x 
5    3   x 

где id является первичным ключом

Как получить последние строки (мы будем основывать это в порядке id) сгруппированных по иностранному идентификатору? В общем, что я хочу, чтобы это

id  foreign_id  value 
3  1    y 
4  2    x 
5  3    x 

ответ

2

Попробуйте этот запрос

SELECT max(id) AS ID, foreign_id FROM tbl 
GROUP BY foreign_id 

Если значение также необходимо затем

SELECT a.ID, a.foreign_id, a.value 
FROM tbl a, 
(SELECT max(id) AS ID, foreign_id 
     FROM tbl GROUP BY foreign_id) b 
WHERE a.id = b.id AND 
     a.foreign_id = b.foreign_id 

FIDDLE

0
SELECT a.* 
FROM tableName a 
     INNER JOIN 
     (
      SELECT foreign_ID, max(id) max_ID 
      FROM tableName 
      GROUP BY foreign_ID 
     ) b ON a.foreign_ID = b.foreign_ID AND 
       a.ID = b.max_ID 

ВЫВОД

╔════╦════════════╦═══════╗ 
║ ID ║ FOREIGN_ID ║ VALUE ║ 
╠════╬════════════╬═══════╣ 
║ 3 ║   1 ║ y  ║ 
║ 4 ║   2 ║ x  ║ 
║ 5 ║   3 ║ x  ║ 
╚════╩════════════╩═══════╝ 
3

Попробуйте этот запрос,

SELECT t.id, t.foreign_id, t.value FROM #temp t 
WHERE t.id IN (SELECT max(id) FROM #temp GROUP BY foreign_id) 

Заменить #temp с фактическим именем таблицы.

0
`SELECT MAX(id) AS ID, 
     foreign_id, 
     value 
FROM tbl 
GROUP BY foreign_id ASC` 

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

`SELECT MAX(id) AS ID, 
     foreign_id, 
     value 
FROM tbl 
WHERE id in (SELECT MAX(id) FROM tbl) 
GROUP BY foreign_id ASC` 
Смежные вопросы