2014-10-12 4 views
0

У меня есть таблица под названием logs.Mysql: вставка полуотчетных записей в другой стол

журналы имеют несколько столбцов, два из которых называются user_id, целое число со знаком и timestamp, что является меткой времени.

Таблица журналов может иметь несколько временных меток на user_id.

Я хочу передать эти данные в таблицу под названием users, которая имеет несколько столбцов, два из которых называются user_id и last_date.

Что мне нужно сделать, так это заполнить столбец last_date таблицы пользователей с последними timestamp таблицы журналов для каждого user_id.

Я знаю, как вставить выделение из таблицы, но я не могу понять, как получить список отдельных user_ids вместе со своими метками времени, отфильтрованными последней меткой времени.

E.G.

SELECT DISTINCT (user_id), timestamp FROM logs GROUP BY timestamp DESC

ответ

2

Во-первых, вам не нужно distinct при использовании group by. Во-вторых, вы хотите агрегировать на user_id. В-третьих, необходима функция агрегирования для timestamp:

SELECT user_id, max(timestamp) 
FROM `log` 
GROUP BY user_id 
ORDER BY max(timestamp) desc; 

я не уверен, если окончательный order by требуется, но она соответствует запросу в этом вопросе.

Это предполагает, что «последняя метка времени» означает наибольшую отметку времени. Если это не так, тогда отредактируйте свой вопрос с образцами данных.

1
SELECT user_id, MAX(timestamp) as last_date FROM `logs` GROUP BY user_id; 
+0

Ах, спасибо, чувак. Кажется очевидным в ретроспективе. :-) – Agamemnus

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