Задать вопрос
yarhosting
@yarhosting
Заказывайте программинг: PHP,SQL, JS,jQuery,Joomla

Как сделать SQL запрос на выборку данных до определенной суммы?

Есть таблица: Дата, Количество, Сумма
Как вывести только последние записи на общее количество= $sum_count не прибегая к циклам

т.е. что то вроде:

SELECT `date`, `count`, `sum` FROM `table` WHERE sum(`count`)<=$sum_count ORDER BY `date` DESC

или

SELECT `date`, `count`, `sum` FROM `table` ORDER BY `date` DESC LIMIT sum(`count`)<=$sum_count

даже бы если такая конструкция и работала - она вывела бы на одну запись меньше, если sum(`count`)!=$sum_count

или все таки я обязан циклом

$count=0;
while ($count<=$sum_count) {
$count+=$row['count'];
//что-то делать
}

Исходник таблицы

CREATE TABLE IF NOT EXISTS `table` (
  `date` date NOT NULL,
  `count` int(11) NOT NULL,
  `sum` int(11) NOT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;


INSERT INTO `table` (`date`, `count`, `sum`, `id`) VALUES
('2000-01-01', 10, 10, 1),
('2001-01-01', 10, 10, 2),
('2002-01-01', 10, 10, 3);
  • Вопрос задан
  • 829 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
yellow79
@yellow79
Senior Software Engineer
SET @all_sum = 0;
SELECT `date`,`count`,`sum` FROM (
  SELECT *, @all_sum:=@all_sum + `sum` AS mysum FROM `table` ORDER BY `date` DESC
) t
WHERE mysum < 5000;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
OKyJIucT
@OKyJIucT
Sunshine reggae
Вместо оператора WHERE используйте HAVING

SELECT `date`, sum(`count`), `sum` 
FROM `table` 
GROUP BY `count` HAVING sum(`count`) <= $sum_count 
ORDER BY `date` DESC
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы