2016-11-02 2 views
-1

Это моя существующей таблицаПолучить последнюю MySQL записи только из колонки

id name version 
| 1 | a | 1.1 | 
| 2 | b | 2.1 | 
| 3 | c | 3.1 | 
| 4 | d | 1.2 | 
| 5 | e | 4.1 | 

как я могу написать запрос для получения результатов, где я буду возвращать все записи, но только последняя запись в версии столбца выбираетс как ниже?

id name version 
| 4 | d | 1.2 | 
| 2 | b | 2.1 | 
| 3 | c | 3.1 | 
| 5 | e | 4.1 | 
+1

Пожалуйста, включите имена таблиц и столбцов. – JosephGarrone

+0

Кроме того, ваш результат не имеет смысла, так как строка 'd' имеет' 5' в качестве своего идентификатора, но в результатах она имеет 1 в качестве своего идентификатора. – JosephGarrone

+0

Вы не поняли логику, если только в желаемых результатах вы не указали 4 insted из 1 – Mihai

ответ

0

Если вы предпочитаете немного менее трудоемкое решение ...

SELECT x.* 
    FROM t x 
    JOIN 
    (SELECT MAX(grade) grade 
     FROM t 
     GROUP 
      BY FLOOR(grade) 
    ) y 
    ON y.grade = x.grade 

http://sqlfiddle.com/#!9/f17db1/16

+0

спасибо @Strawberry это работает –

-1

Это немного трудоемкий, но это может быть сделано

SELECT 
    SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY REPLACE(grade,'.','')*1 DESC),',',1) as id, 
    SUBSTRING_INDEX(GROUP_CONCAT(letter ORDER BY REPLACE(grade,'.','')*1 DESC),',',1) as letter, 
    MAX(grade) as grade 
FROM 
    t 
    GROUP BY SUBSTRING_INDEX(grade,'.',1) 
    ORDER BY REPLACE(grade,'.','')*1 

Предполагая, что последний столбец поплавок вы можете использовать ORDER BY lastcol непосредственно

FIDDLE

CREATE TABLE t 
    (`id` int, `letter` varchar(7), `grade` varchar(55)) 
; 

INSERT INTO t 

VALUES 
    (1, 'a', '1.1'), 
    (2, 'b', '2.1'), 
    (3, 'c', '3.1'), 
    (4, 'd', '1.2'), 
    (5, 'e', '4.1') 
+1

эй @ Михай, это прекрасно, спасибо вам большое. Ты отлично разбираешься в MYSQL –

+0

Немного трудоемкий? Я скажу! – Strawberry

Смежные вопросы