Цитата(jimbo @ 24.1.2012, 17:38 ) | Второй запрос я экспортирую в эксель и считаю сумму unix_timestamp(close_time)-unix_timestamp(open_time) и получаю отличный результат от первого запроса.
|
Первый запрос считает вам сумму разницы по всему содержимому таблицы. Лимит, будучи расширением конструкции order by, применяется к результату выполнения запроса, а не к исходному набору данных, а так как запрос вернет лишь одну запись, как уже верно заметил tzirechnoy, в нем нет никакого смысла. Второй запрос возвращает лишь десять первых попавшихся записей (любых, т.е. будучи дважды запущенным в разные моменты времени, он может вернуть разные результаты, на что уже намекнул Akina). Не удивительно, что суммы не сходятся. Ведь сравниваются суммы всех записей и любых десяти.
Для того чтобы суммы сошлись, вам следует 1) определить критерии ранжирования (сортировки), не допускающие не однозначности. Лучший способ добиться этого, включить первичный ключ в критерий сортировки 2) Применить этот критерий ранжирования к обоим запросам 3) Аггрегат считать по результату подзапроса т.е:
| Код | select sum ( unix_timestamp(close_time)-unix_timestamp(open_time)) from (select * from table where login = 12345 order by id limit 10) s
|
Добавлено @ 09:28
Цитата(Zloxa @ 25.1.2012, 09:23 ) | | Для того чтобы суммы сошлись, вам следует |
еще есть вариант - избавиться от лимита вообще. В результате суммы должны будут сойтись. |