imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 29.06.2010, 15:17     # 1
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
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
Мне это решение не очень нравится. Чтобы проблем не возникло, туда нужно уникальный ключ делать на user_id + insert_date.

Более красивые варианты есть?
EvroStandart вне форума  
Старый 04.07.2010, 23:42     # 2
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Хм, у меня получилось несколько проще:
Код:
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)
Писал "на вскидку", то есть не проверял, чисто по посту, но вроде должно работать, и если правильно понял, то именно как надо. Если очень надо, скажите (а лучше дайте этот SQL дамп для теста) - проверю.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 08.07.2010, 13:14     # 3
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
Цитата:
Сообщение от Hubbitus Посмотреть сообщение
Хм, у меня получилось несколько проще
Спасибо. Так получше выглядит

Код:
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 )
EvroStandart вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 05:02.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.