Доброго времени суток, уважаемые форумчане! Столкнулся с казалось бы простой задачей, однако так и не смог ее решить. Подскажите, пожалуйста, реализацию, заранее спасибо. Есть таблица с транзакциями: CREATE TABLE `transactions` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `date` INT NOT NULL , `user_id` INT NOT NULL , `amount` INT NOT NULL ); amount может быть положительным и отрицательным. Одним запросом найти транзакцию, которая в последний раз уменьшила баланс определенного user_id ниже суммы X. Текущий баланс может быть любым. amount - это сумма транзакции, баланс - сумма всех транзакций.
Тут наверное надо добавить еще один столбец в таблицу, Было-Стало Amount, чтобы видеть что сумма все таки уменьшилась а не увеличилась
в оракл для подобного есть аналитические функции типа LAG(), LEAD()... в мускуле простого решения добиться будет сложно.
google "mysql running total" вот например находится: http://stackoverflow.com/questions/5032360/running-sums-for ... s-in-mysql перефразируя на ваши названия: Код (Text): select `user_id`, `date`, `amount`, (select sum(`amount`) from `transactions` AS t2 where t1.`user_id` = t2.`user_id` and t1.`date` >= t2.`date` ) as `total` from `transactions` AS t1 where `user_id`=1 order by `date` desc вернет в обратном календарном порядке операции и исходящий остаток для заданного пользователя. соответственно если этот запрос завернуть еще в один и добавить WHERE total< X LIMIT 1 то получится нужный ответ. медленно, но верно