Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Прошу помочь разобраться.
|
|||
|---|---|---|---|
|
#18+
Прошу помочь разобраться в составлении запроса. Перерыл уже весь инет (ну, не весь, но полрунета точно). Имеется таблица: id uY Год uM Месяц a_id ИД авто fin_km Показания спидометра на последний день месяца Хочу получить пробег всех машин за произвольный месяц. Но есть моменты: 1) переход через НГ, 2) машина может простоять месяц-другой-третий.. Пока вымучил из себя вотт такой запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Но запрос работает не верно, выбирает первую, а не предыдущую. (( Просьба натыкать, где я ошибся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 14:11 |
|
||
|
Прошу помочь разобраться.
|
|||
|---|---|---|---|
|
#18+
loisopесть моменты: 1) переход через НГ, В принципе не влияет. loisop2) машина может простоять месяц-другой-третий.. И что? за соответствующий месяц запись отсутствует? или как? Продемонстрируйте свои данные не описанием "на пальцах", а набором запросов CREATE TABLE + INSERT INTO. Запросы - проверить!!! а то бывали тут ... авторы - постили нерабочие или кривые запросы. Ну и предусмотрите в данных ВСЕ возможные "моменты" - и для каждого укажите входные параметры плюс желаемый результат с пояснением, почему именно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 14:37 |
|
||
|
Прошу помочь разобраться.
|
|||
|---|---|---|---|
|
#18+
Akina, AkinaИ что? за соответствующий месяц запись отсутствует? или как? Да, если движухи нет - данные не вносятся. AkinaПродемонстрируйте свои данные не описанием "на пальцах", а набором запросов CREATE TABLE + INSERT INTO. Колонка Тип Комментарий id int(3) Автоматическое приращение uY int(4) [2017] uM int(2) a_id int(2) fin_km int(8) Индексы PRIMARY id INDEX a_id INSERT INTO `rashod` (`id`, `uY`, `uM`, `a_id`, `fin_km`) VALUES (1, 2016, 12, 1, 375899), (2, 2016, 12, 2, 300077), (3, 2016, 12, 3, 122794), (4, 2017, 1, 1, 391199), (5, 2017, 1, 2, 316577), (6, 2017, 2, 1, 422199), (7, 2017, 3, 1, 451899), (8, 2017, 8, 3, 129694), (12, 2017, 8, 1, 542838), (13, 2017, 1, 3, 124194); Вышеуказанный запрос дает такое: a_id bduy bdum aduy adum delta bdfk adfk probeg min(delta) 1 2017 8 2016 12 8 542838 375899 166939 5 3 2017 8 2016 12 8 129694 122794 6900 7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 14:51 |
|
||
|
Прошу помочь разобраться.
|
|||
|---|---|---|---|
|
#18+
А где CREATE TABLE? loisopВышеуказанный запрос дает такоеНу вот кому интересно, что даёт неправильный запрос? Лучше было сформулировать задачу (например, "найти пробег за 25 месяц 2345 года"), эталонный ответ (например, "125") и пояснение (например, "за 25-2345 пробег 1000, предыдущее значение 750, но за 23-2345, так что это 2 месяца, разность делим на 2, получаем 125"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 14:57 |
|
||
|
Прошу помочь разобраться.
|
|||
|---|---|---|---|
|
#18+
Соответственно рассмотреть ВСЕ варианты задач (есть за этот и предыдущий, есть за этот и нет за предыдущий, есть за следующий/предыдущий и нет за этот, есть за этот и вообще нет записей раньше, и т.п.), каждая со своими исходными на ЭТИХ данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 14:59 |
|
||
|
Прошу помочь разобраться.
|
|||
|---|---|---|---|
|
#18+
AkinaА где CREATE TABLE? Извиняюсь.. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. AkinaЛучше было сформулировать задачу (например, "найти пробег за 25 месяц 2345 года"), эталонный ответ (например, "125") и пояснение (например, "за 25-2345 пробег 1000, предыдущее значение 750, но за 23-2345, так что это 2 месяца, разность делим на 2, получаем 125"). Найти пробег каждой машины за (например) 8й месяц 2017 года. Должно получиться примерно так (цифры пробега "с потолка"): a_id probeg 1 10639 2 47930 3 0 4 0 5 6907 Для 1,2 и 5 машин пробег = разница с предыдущим показателем (который может быть и старше 1 месяца). Для 3 и 4 машин пробег нулевой потому, что данных выбранного месяца нет. AkinaСоответственно рассмотреть ВСЕ варианты задач (есть за этот и предыдущий, есть за этот и нет за предыдущий, есть за следующий/предыдущий и нет за этот, есть за этот и вообще нет записей раньше, и т.п.), каждая со своими исходными на ЭТИХ данных. Варианты. 1. Есть данные за указанный И есть за непосредственно предыдущий месяц: пробег = разница с предыдущим показателем (машина в работе) 2. Есть данные за указанный И есть за предыдущий (с неким, большим 1, интервалом) месяц: пробег = разница с предыдущим показателем (машина простаивала) 3. Есть данные за указанный И нет данных за любой предыдущий месяц: пробег = указанный показатель (условно, вариант "новая машина") 4. Нет данных за указанный И есть за любой предыдущий месяцы: пробег нулевой (машина в простое) С конкретными цифрами быстро не могу (могу перебить исходные данные, на более легкие, и тогда уже дать). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 15:33 |
|
||
|
Прошу помочь разобраться.
|
|||
|---|---|---|---|
|
#18+
Уже лучше... но приведённый выше код вставки данных не лезет в опубликованный DDL... хотя я просил ПРОВЕРИТЬ работоспособность... Пока теоретически: придётся получать данные в три этапа. 1) Получить список машин. 2) Получить пробег на заданный месяц, для отсутствующих - ноль. 3) Получить пробег на последний ранее заданного месяц, для отсутствующих - ноль. Вычитание даст пробег за заданный месяц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 16:23 |
|
||
|
Прошу помочь разобраться.
|
|||
|---|---|---|---|
|
#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. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 17:01 |
|
||
|
Прошу помочь разобраться.
|
|||
|---|---|---|---|
|
#18+
Akina, Вчера не смог отреагировать на сообщение. Спасибо за приведенный код. К сожалению, он (код) не совсем рабочий.. Сегодня убил почти весь день, пытаясь исправить. На текущий момент, увы.. Ваш код работает, если значений всего 2, за текущий месяц и за произвольно предыдущий. Если значений больше (а предполагается, что таки будет больше), то идет удвоение вывода с разными значениями пробега: разницы нужного с предыдущим И разница нужного с первым. Приведу Ваш код, с добавленными данными: Код: 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. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 15:40 |
|
||
|
Прошу помочь разобраться.
|
|||
|---|---|---|---|
|
#18+
loisopСегодня убил почти весь день, пытаясь исправить. Что тут делать целый день? При прогоне ведь сразу видно, что неверные результаты получаются на этапе получения предыдущего пробега. Если выполнить запрос этой вьюшки, выведя все дополнительные поля Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. то сразу становится видна причина - рассогласование между data.car и prev_ym.car. Добавим соответствующее условие: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Вот, теперь лучше... осталось внести это исправление в окончательный запрос и убедиться, что результат соответствует истинному: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 16:43 |
|
||
|
|

start [/forum/topic.php?fid=47&tid=1830470]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 129ms |

| 0 / 0 |
