2013-12-04 5 views
3

У меня есть эти таблицы,GROUP BY ПОСЛЕДНЯЯ ДАТА MYSQL

user 
    id 
    name 

visit 
    id 
    id_user (fk user.id) 
    date 
    comment 

Если я выполнить этот запрос,

SELECT u.id, u.name, e.id, e.date, e.comment 
FROM user u 
LEFT JOIN visit e ON e.id_user=u.id 

я,

1 Jhon 1 2013-12-01 '1st Comment' 
1 Jhon 2 2013-12-03 '2nd Comment' 
1 Jhon 3 2013-12-01 '3rd Comment' 

Если я GROUP BY u.id, то я получаю

1 Jhon 1 2013-12-01 '1st Comment' 

мне нужен последний визит Jhon

1 Jhon 3 2013-12-04 '3rd Comment' 

Я стараюсь это

SELECT u.id, u.name, e.id, MAX(e.date), e.comment 
FROM user u 
LEFT JOIN visit e ON e.id_user=u.id 
GROUP BY u.id 

И это,

SELECT u.id, u.name, e.id, MAX(e.date), e.comment 
FROM user u 
LEFT JOIN visit e ON e.id_user=u.id 
GROUP BY u.id 
HAVING MAX(e.date) 

И я получаю

1 Jhon 1 2013-12-04 '1st Comment' 

Но это мне не подходит ... Мне нужен последний визит этого пользователя

1 Jhon 3 2013-12-01 '3rd Comment' 

Спасибо!

ответ

2

Это должно дать вам последний комментарий для каждого пользователя:

SELECT u.id, u.name, e.id, e.date, e.comment 
FROM user u 
LEFT JOIN (SELECT t1.* 
    FROM visit t1 
    LEFT JOIN visit t2 
     ON t1.id_user = t2.id_user AND t1.date < t2.date 
    WHERE t2.id_user IS NULL 
) e ON e.id_user=u.id 
+0

Спасибо! Для посещений той же даты я добавил ORDER BY DESC t1.id DESC – Ricmcm

1
SELECT u.id, u.name, e.id, e.date, e.comment 
FROM user u 
LEFT JOIN visit e ON e.id_user=u.id 
ORDER BY e.date desc 
LIMIT 1; 
+1

Если он хочет только результаты для одного пользователя это идеальный вариант, но если он хочет, чтобы его больше, чем один (который я считаю, что он делает) , это не сработает –

+0

Справедливая точка. Просто продолжалась моя интерпретация ОП. В частности «Но это не подходит для меня ... Мне нужен последний визит этого пользователя». Поэтому я догадался, что там где-то есть предложение 'where' ... –

0

использование:

SELECT u.id, u.name, e.id, e.date, e.comment FROM user u LEFT JOIN visit e ON e.id_user=u.id order by e.date DESC limit 0,1 

Покажет 1 запись заказ по дате.

Надежда поможет!