![]() |
|
Модераторы: skyboy |
![]()
|
|
| jimbo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.6.2009 Где: Южно-Сахалинск Репутация: нет Всего: нет |
есть таблица, допустим входов и выходов людей.
столбцы номер пользователя, дата и время входа, дата и время выхода. Мне надо найти количество отработанных часов конкретного пользователя за последние 10 входов. пишу что-то вроде:
Второй запрос я экспортирую в эксель и считаю сумму unix_timestamp(close_time)-unix_timestamp(open_time) и получаю отличный результат от первого запроса. Как правильно считать сумму datetime-ов в секундах с 1970 года? --------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
limit без order by - уже бессмыслица.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| jimbo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.6.2009 Где: Южно-Сахалинск Репутация: нет Всего: нет |
не важно, я использовал order by close_time desc limit 10 - одно и тоже --------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Первый запрос (по причине отстутствия group by) всегда возвращает одну строку (с суммой по всем входам), limit безсмысленнен.
|
|||
|
||||
| Zloxa |
|
||||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Первый запрос считает вам сумму разницы по всему содержимому таблицы. Лимит, будучи расширением конструкции order by, применяется к результату выполнения запроса, а не к исходному набору данных, а так как запрос вернет лишь одну запись, как уже верно заметил tzirechnoy, в нем нет никакого смысла. Второй запрос возвращает лишь десять первых попавшихся записей (любых, т.е. будучи дважды запущенным в разные моменты времени, он может вернуть разные результаты, на что уже намекнул Akina). Не удивительно, что суммы не сходятся. Ведь сравниваются суммы всех записей и любых десяти. Для того чтобы суммы сошлись, вам следует 1) определить критерии ранжирования (сортировки), не допускающие не однозначности. Лучший способ добиться этого, включить первичный ключ в критерий сортировки 2) Применить этот критерий ранжирования к обоим запросам 3) Аггрегат считать по результату подзапроса т.е:
Добавлено @ 09:28 еще есть вариант - избавиться от лимита вообще. В результате суммы должны будут сойтись. Это сообщение отредактировал(а) Zloxa - 25.1.2012, 09:45 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
||||
|
|||||
| jimbo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.6.2009 Где: Южно-Сахалинск Репутация: нет Всего: нет |
всем большое спасибо за участие. С вашей помощью я добился наилучших результатов.
--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |