MySQL группировать по определенному типу и выбрать последнюю строку? - PullRequest
3 голосов
/ 14 июля 2011

Представьте себе таблицу с типом столбцов, датой, сообщением. И некоторые строки выглядят так (тип | дата | сообщение):

1 | 1310572318 | Hello
1 | 1310572317 | Hi
2 | 1310572315 | Wassup
3 | 1310572312 | Yo
3 | 1310572311 | Hey
3 | 1310572309 | Eyo
1 | 1310572305 | Hello
1 | 1310572303 | Good Day

Можно ли сгруппировать их по типу и выбрать самые последние (упорядоченные по дате), чтобы результат был:

1 | 1310572318 | Hello
2 | 1310572315 | Wassup
3 | 1310572312 | Yo
1 | 1310572305 | Hello

Я почти уверен, что должен использовать некоторые функции MySQL Aggregate, но я не очень хорош в них, поэтому прошу немного помочь здесь.

Ответы [ 3 ]

2 голосов
/ 14 июля 2011

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

Это может быть полезно:

SELECT 
    `type`, 
    MAX(`date`) AS `max_date`, 
    (SELECT `t2`.`message` FROM `table` AS `t2` WHERE `t2`.`type` = `t1`.`type` ORDER BY `t2`.`date` DESC LIMIT 1)
FROM `table` AS `t1`
GROUP BY `type`
1 голос
/ 14 июля 2011

Пожалуйста, попробуйте:

Select type, date, message from tableName
group by type
having min(date)

Обратите внимание, что последняя строка недействительна

 1 | 1310572305 | Hello
0 голосов
/ 14 июля 2011

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

SELECT type, MAX(date), message
FROM myDB.myTable
GROUP BY type;

Если я не пропускаю что-то фундаментальное, это должно сработать.

...