|
|
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
В таблице data имеются поля: date_put datetime - дата-время путевки mhrs double - кол-во моточасов number varchar(10) - номер автотранспорта Нужно просуммировать кол-во моточасов по каждому порядковому дню месяца выбранного периода времени по каждому автотранспорту. Причем период может быть не только с начала по конец одного месяца, но и захватывать другой месяц(ы); в один день может быть только одна путевка. Должно получиться что-то типа этого: Начал писать запрос и понял, что тупо завис на суммировании по дням месяца... Код: sql 1. 2. 3. 4. 5. Прошу помощи в составлении такого запроса, если он возможен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2018, 11:56 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
1. sum(mhrs) 2. GROUP BY dp, number И останется только развернуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2018, 12:05 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2018, 12:36 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
Если правильно понял про "разворот", то должно быть так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. По-крайней мере, это считает и вроде даже то, что надо :) И группировка по dp оказалась не нужна. Проверьте, плиз, правильный это запрос получился и нельзя ли упростить сию простыню? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2018, 13:35 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
LiYingнельзя ли упростить сию простыню?Ну разве что ELSE NULL поубирать - оно и так при невыполнении NULL будет. Опять же можно попробовать уменьшить количество обращений к функции, "закэшировав" значение в переменной: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Теоретически - в документации не описан порядок вычисления полей выходного набора, но на практике мне не приходилось сталкиваться с тем, что он не соответствует тексту запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2018, 13:48 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
Но правильно работать будет, если в один день на машину не больше одной путевки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2018, 13:58 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
Akina , Спасибо, с переменной работает также. Вопрос, зачем нужно Код: sql 1. ? Работает и без этой строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2018, 14:10 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
982183Но правильно работать будет, если в один день на машину не больше одной путевки. Упс... уточнил в гараже, есть нюансы при которых может быть НЕСКОЛЬКО путевок в один день! Как быть в этом случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2018, 14:11 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
Проверил на тестовой БД с несколькими путевками в один день на один авто - ложная тревога, мой запрос-простыня работает, моточасы суммируются! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2018, 14:18 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
LiYingРаботает и без этой строки.Запусти запрос подряд дважды в одном сеансе и сравни первые строки в выводе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2018, 15:16 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
AkinaLiYingРаботает и без этой строки.Запусти запрос подряд дважды в одном сеансе и сравни первые строки в выводе... Извиняюсь, за возвращение к поднятому вопросу - не дает покоя :)) Запускал дважды и даже несколько раз, возвращаемые наборы данных - идентичны. Так все-таки, в чем смысл использования Код: sql 1. ??? Поясните, пожалуйста, если работает и без этой строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 14:16 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
LiYingПоясните, пожалуйста, если работает и без этой строки. Изучай. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 14:25 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
Akina, хм, у меня другой результат повтора ваших шагов: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 14:43 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
Но тем не менее, результаты двойного запроса в одной сессии моего рабочего запроса без строки Код: sql 1. все равно одинаковы. Может что в самом запросе на это влияет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 14:53 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
LiYingдругой результатА версия MySQL - какая? И - выполняете через консольного клиента (mysql.exe) или через что-то ещё? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 15:35 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
Akina, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Использую Navicat Premium, в нем есть тул "Console...", который вызывает консоль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 15:58 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
LiYingИспользую Navicat Premium, в нем есть тул "Console...", который вызывает консоль.Такие тулзы как минимум шлют серверу дополнительные запросы, а порой ещё и творчески перерабатывают существующие... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 16:19 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
Akina, тоже так подумалось, потому пошел на сервер, запустил mysql.exe и ваш пример. Итог тот же: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 16:37 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
Ладно, хрен с ею, с разницей... в любом случае второй вариант запроса, с инициализацией в секции WHERE, всегда даст один и тот же результат. А вот без инициализации, как видим, результат не детерминирован. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 16:48 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
Akina, Для интереса решил у себя проверить, сервер 5.6.13 при первом запуске: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. все верно, ведь в этом случае Код: sql 1. а потом уже @rn3=1 и повторные запуски его увеличивают, интересно почему у вас по другому. Ну и в касаемо самого запроса: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. тут действительно Код: sql 1. думаю не нужен, т.к. сразу же первой строкой идет присвоение Код: sql 1. и переменная сразу имеет значение и при каждом следующем запросе переприсваиваеся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 08:26 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
Близнец1980все верно, ведь в этом случаеА вот теперь объясни, почему у меня то же самое на Server version: 8.0.12 MySQL Community Server - GPL даёт другой результат... То есть я понимаю, что у меня сервер выполняет итерационную обработку, а у вас пакетную, но чем это определяется и как настраивается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 08:59 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
Близнец1980касаемо самого запросаДа, согласен. Но... Практика показывает, что вычисление выходного набора всегда выполняется строго по тексту... и пока отклонений от этого принципа не зарегистрировано (а если вдруг - то взвоет куча народу). Но увы, такое поведение не документировано... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 09:03 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
Поторопился что-то, ведь coalesce(@rn3+1, 1) = coalesce(null+1, 1) только для первой строки, а потом переменная уже должна иметь значение. Покопался в документации, нашел вот что: "The order of evaluation for expressions involving user variables is undefined. For example, there is no guarantee that SELECT @a, @a:=@a+1 evaluates @a first and then performs the assignment. In addition, the default result type of a variable is based on its type at the beginning of the statement. This may have unintended effects if a variable holds a value of one type at the beginning of a statement in which it is also assigned a new value of a different type." https://dev.mysql.com/doc/refman/8.0/en/user-variables.html с локальными переменными вообще надо быть аккуратней. AkinaА вот теперь объясни, почему у меня то же самое на Server version: 8.0.12 MySQL Community Server - GPL даёт другой результат... х.з. видать звезды так сошлись :) (видать логику поменяли при обращении к неинициализованной переменной до начала инструкции). Может тогда лучше так запрос переписать: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 11:24 |
|
||
|
Запрос с суммированием по дням месяца
|
|||
|---|---|---|---|
|
#18+
Близнец1980Покопался в документации, нашел вот что:Во-о-т... я тоже всегда на это кивал... а то, что наблюдается у вас, этому противоречит. Близнец1980coalesce(@rn3+1, 1) = coalesce(null+1, 1) только для первой строки, а потом переменная уже должна иметь значениеОптимизатор тоже считает это самое выражение, получает единицу, а потом, сцуко, считает это выражение константным!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 12:55 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39730294&tid=1829497]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 386ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...