imho.ws |
![]() |
![]() |
![]() |
# 1 |
Full Member
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
MySQL новые записи
Есть таблица с такой структурой:
id user_id amount insert_date Данные примерно такие: 1 / 1 / 15 / 2010-04-13 12:05:11 2 / 1 / -2 / 2010-04-22 09:00:49 3 / 1 / -1 / 2010-04-22 09:01:17 4 / 2 / 8 / 2010-04-22 09:06:45 5 / 2 / -1 / 2010-04-22 09:10:41 6 / 2 / -1 / 2010-04-22 09:12:37 7 / 2 / -1 / 2010-04-22 09:12:42 8 / 1 / 10 / 2010-06-09 00:00:00 9 / 1 / -2 / 2010-06-09 12:59:00 10 / 3 / 5 / 2010-06-09 13:27:45 Нужна выборка по user_id. Чтобы для каждого user_id получить последнюю запись где количество больше нуля. Результат должен получиться такой: 8 / 1 / 10 / 2010-06-09 00:00:00 4 / 2 / 8 / 2010-04-22 09:06:45 10 / 3 / 5 / 2010-06-09 13:27:45 У меня получился такой запрос: Код:
SELECT u.id, u.amount, u.user_id, u.insert_date, u3.user_id AS user_id2, u3.insert_date AS insert_date2 FROM users_konto AS u INNER JOIN ( SELECT u.id, u.user_id, u.amount, MAX( u2.insert_date ) AS insert_date FROM users_konto u LEFT JOIN ( SELECT id, user_id, amount, insert_date FROM users_konto WHERE amount >0 ) AS u2 ON u.id = u2.id GROUP BY u.user_id HAVING u.amount >0 ) AS u3 ON u3.user_id=u.user_id AND u3.insert_date=u.insert_date WHERE u.amount >0 Более красивые варианты есть? |
![]() |
![]() |
# 2 |
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Хм, у меня получилось несколько проще:
Код:
SELECT * FROM users_konto u INNER JOIN ( SELECT u1.user_id, AMX(u1.insert_date) FROM users_konto u1 WHERE u1.amount > 0 GROUP BY user_id ) u2 ON (u.user_id = u2.user_id and u.insert_date = u2.insert_date)
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
![]() |
![]() |
# 3 |
Full Member
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Спасибо. Так получше выглядит
![]() Код:
SELECT * FROM users_konto u INNER JOIN ( SELECT u1.user_id, MAX( u1.insert_date ) AS insert_date FROM users_konto u1 WHERE u1.amount >0 GROUP BY user_id )u2 ON ( u.user_id = u2.user_id AND u.insert_date = u2.insert_date ) |
![]() |