2010-06-22 2 views
0

В ссылке на мой предыдущий вопрос: One table, two column MYSQL query challengeОдин стол, три колонки вопрос MYSQL запрос

командой: «SELECT имя хоста, GROUP_CONCAT (DISTINCT имя) как имя от комментариев GROUP BY имя хоста»

возвращается ожидаемые результаты:

192.168.0.1 user1, user2

192.168.3.5 user3

В той же таблице «комментарии» также есть поле «timestamp». Как включить последнюю (самую последнюю) временную метку для каждого пользователя с помощью этого ip?

Пример:

192.168.0.1 user1-1277146500, user2-1277250087

192.168.3.5 user3-1237150048

Я попробовал несколько вариантов команды, но может получить только все временные метки, не самые последние ...

также .. если возможно, было бы неплохо преобразовать временную метку эпохи в нечто более дружелюбное, прежде чем отображать ее.

ответ

0
SELECT 
    hostname, 
    GROUP_CONCAT(CONCAT_WS("-", name, m_timestamp)) 
FROM 
    (SELECT 
      hostname, 
      name, 
      cast(max(timestamp) as char(24)) as m_timestamp 
    FROM 
      comments 
    GROUP BY 
      hostname, 
      name) as A 
GROUP BY 
    hostname 

Редактировать

Измененное название колонки для отметки времени (был c_timestamp) за комментариями Op в

+0

Я изменил c_timestamp на метку времени после получения «ERROR 1054 (42S22) в строке 1: Неизвестный столбец« c_timestamp »в« списке полей »», и он отлично работал после этого. Спасибо! –

+0

Сделал то же изменение в исходном запросе. Ура! – potatopeelings

4

Concat в varchar конвертированы Max(timestamp) на имя и добавить метку времени в группе по статье

SELECT hostname, 
    GROUP_CONCAT(DISTINCT name, CAST(MAX('timestamp') AS VARCHAR) as name 
FROM comments GROUP BY hostname 

Думаю, что это будет работать, хотя я не проверял это.

+0

как "GROUP_CONCAT (DISTINCT имя, MAX (временной метки)), как имя"? Я получаю синтаксическую ошибку ... –

+1

вам нужно указать Max ('timestamp') на тип имени, скажем, если имя varchar, тогда наберите Max ('timestamp') как varchar – Chinjoo

+0

hm .. все еще пытается. . "SELECT имени хоста, GROUP_CONCAT (DISTINCT имени, литой (MAX (временная метка) AS VARCHAR)) как имя от комментариев GROUP BY имени хоста" возвращает синтаксическую ошибку ... –

0
SELECT hostname, GROUP_CONCAT(DISTINCT name) as name, max(TIMESTAMP_FIELD) as timestamp_name FROM comments GROUP BY hostname 
+0

Это почти что, за исключением того, что отображается последняя временная метка для этого имени хоста, я хочу отобразить последнюю временную метку, в которой каждое имя пользователя указано с этим именем хоста. В этом примере отображается только одна временная метка: 192.168.0.1 user1, user2 1158169709 –

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