2016-06-08 1 views
0

У меня есть таблица для записи пользователей последний Войти подробноПолучение последней записи в каждой группе без первичного ключа

event_name userID value     created_at 
------------------------------------------------------------- 
last_login 12 2016-06-02 11:06:29 2016-06-02 11:06:29 
last_login 12 2016-06-02 10:16:11 2016-06-02 10:16:11  
last_login 14 2016-06-02 10:11:13 2016-06-02 10:11:13  
last_login 17 2016-05-02 10:16:29 2016-05-02 10:16:29  
last_login 14 2016-05-02 10:15:11 2016-06-02 10:15:11  

Ожидаемый результат:

event_name userID value     created_at 
------------------------------------------------------------- 
last_login 12 2016-06-02 11:06:29 2016-06-02 11:06:29 
last_login 14 2016-06-02 10:11:13 2016-06-02 10:11:13  
last_login 17 2016-05-02 10:16:29 2016-05-02 10:16:29  

Я хочу, чтобы захватить эту информацию таблицы группы по UserId , Я сделал его заказ by created_at и показал значение в timesAgo fromat (например, 1 час назад), но я не получаю последнюю запись при использовании группы, например, для userID = 12 Я получаю значение = 2016-06-02 10:16: 11 вместо значения = 2016-06-02 11:06:29

+0

Также укажите ожидаемый результат! – jarlh

+0

Каков ваш SQL-запрос? – Igoranze

+0

Какой тип данных БД вы используете для 'value'? Значение –

ответ

1

Если я вас правильно понял, вы можете добиться этого с NOT EXISTS():

SELECT * FROM YourTable t 
WHERE NOT EXISTS(SELECT 1 FROM YourTable s 
       WHERE s.created_at > t.created_at 
        AND s.userID = t.userID) 
+0

Я думаю, что я не делал себя ясно в вопросе, я добавил ожидаемый результат, чтобы сделать его более понятным, что мне нужно –

+0

Извините, до сих пор не понимаю , почему один раз вы выбираете самую большую дату, и один раз самый маленький ?! @KuldeepDangi – sagi

+0

записи сгруппированы по 'USERID' –

1

Попробуйте это.

Сначала я получить максимум от created_at и идентификатора пользователя, а затем я присоединиться к Получить ряд отверстий

SELECT d.* FROM (
    SELECT 
     userID, MAX(created_at) AS created_at 
    FROM 
     tablename 
    GROUP BY userID) AS `keys` 
LEFT JOIN tablename d ON 
    d.userID = `keys`.userID 
    AND 
d.created_at = `keys`.created_at; 

Sample

MariaDB []> SELECT d.* FROM (
    -> SELECT 
    ->  userID, MAX(created_at) AS created_at 
    -> FROM 
    ->  tablename 
    -> GROUP BY userID) AS `keys` 
    -> LEFT JOIN tablename d ON 
    -> d.userID = `keys`.userID 
    -> AND 
    -> d.created_at = `keys`.created_at; 
+--------+----------------------------+ 
| userID | created_at     | 
+--------+----------------------------+ 
|  1 | 0000-00-00 00:00:00.000000 | 
|  2 | 2016-06-03 13:16:07.000000 | 
+--------+----------------------------+ 
2 rows in set (0.00 sec) 

MariaDB []> 
+0

выполняется этот запрос в mysql, что приводит к ошибке синтаксиса 'near AS keys ' –

+0

@Kuldeep Dangi - извините - моя ошибка - сначала: ключи - это ключевое слово и должны быть возвращены или использованы другим псевдонимом. Во-вторых: я забыл псевдоним для max (created_date). Я изменил свой ответ. повторите попытку - извините –

+0

его рабочая прохлада сейчас –

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

  • Нет связанных вопросов^_^