2012-06-25 3 views
1

У меня есть 2 таблицы, из которых я хочу получить запрос.mySQL (left join?)

Первый стол (назовем он users) содержит следующие столбцы: id и name.

Второй стол (назовем он transactions) содержит следующие столбцы: user_id, amount и timestamp.

Как узнать последнюю метку времени в transactions для каждого пользователя в таблице users?

EDIT:

Спасибо за все ваши ответы до сих пор! Действительно ценю это. Как насчет, если я хочу выбрать пользователей с последней меткой времени больше определенного значения?

+0

Это выглядит si Милар: http://stackoverflow.com/questions/5820042/max-date-for-each-worker –

ответ

3
SELECT u.*,MAX(t.timestamp) latest_timestamp 
FROM transactions t 
LEFT JOIN users u ON t.user_id=u.id 
GROUP BY t.user_id 

Должно быть то, что вы ищете. Этот запрос должен выбрать последнюю временную метку транзакции для каждого пользователя.

+3

тот же ответ, на одну минуту вперед, дайте ему очки – Jarry

+0

+1 для вежливости –

+0

За исключением этого не будет работать, так как все столбцов в пользователях не указаны в предложении GROUP BY. :( –

1
SELECT 
    id, 
    name, 
    max(timestamp) 
FROM users 
INNER JOIN transactions 
ON users.id = transactions.user_id 
GROUP BY id,name 

, что должно дать вам тэ наибольшую временную метку для каждого пользователя в таблице пользователей

0

Попробуйте

SELECT Users.name,MAX(T.timestamp) As LastTimeStamp 
FROM Users 
LEFT JOIN Transactions as T ON Users.user_id=T.user_id  
GROUP BY Users.name  
0

Этот запрос будет делать больше, чем то, что вы просили, но это только в случае, если ваш следующий вопрос будет «что, если я также хотел знать сумму, которая относится к максимальной отметке времени?»:

SELECT id, name, t.`timestamp`, amount 
FROM (SELECT id, name, MAX(`timestamp`) AS `timestamp` 
    FROM users u 
    INNER JOIN transactions t ON t.user_id=u.id 
    GROUP BY id, name 
) AS maxt 
INNER JOIN transactions t 
ON t.user_id = maxt.id AND t.`timestamp` = maxt.`timestamp`