|
|
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
Есть таблица остатков, где отображаются остатки товара на каждую дату. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Необходимо составить запрос, который бы выводил остатки товара на вчерашнюю и на сегодняшнюю дату. Запрос на вчерашнюю дату (yesterday): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Показывает значение 21049. Запрос на сегодняшнюю дату (today): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Показывает значение 27406. Теперь пробуем объединить оба запроса, чтобы сразу показал остатки на вчерашнюю и на сегодняшнюю даты: Код: 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. Ожидаем получить два значения: 21049 и 27406. Однако в результате получается: 21049 и 21049. Почему? Как получить независимые результаты на вчера и сегодня? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 04:12:42 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
Немного переписал запросы, добавил проверку на ограничение даты для каждого вложенного запроса, получились другие результаты. Но все равно разные. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 27504 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 27406 Код: 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. 27504 и 26882. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 04:29:12 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
svnvlad, а вот эти трёхэтажные навороты - они зачем? Если исходить из структуры и формулировки, вроде бы вполне достаточно такого запроса Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Или вы что-то недоговорили? PS. svnvlad Код: sql 1. 2. 3. 4. 5. 6. Записи, удовлетворяющие третьему условию, автоматически будут удовлетворять и второму. Второе условие здесь просто лишнее. Код автоматом нагенерён, что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 08:14:25 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
tanglirsvnvlad, а вот эти трёхэтажные навороты - они зачем? Если исходить из структуры и формулировки, вроде бы вполне достаточно такого запроса Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Или вы что-то недоговорили? PS. svnvlad Код: sql 1. 2. 3. 4. 5. 6. Записи, удовлетворяющие третьему условию, автоматически будут удовлетворять и второму. Второе условие здесь просто лишнее. Код автоматом нагенерён, что ли? На это целая тема была http://www.sql.ru/forum/687908/faq-vyborka-pervoy-posledney-zapisi-v-gruppah ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 10:20:28 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
svnvladНа это целая тема былану и где в факе такая трёхэтажная хренотень, как в стартпосте? и чем всё-таки не устраивает мой вариант? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 10:30:19 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
tanglirsvnvladНа это целая тема былану и где в факе такая трёхэтажная хренотень, как в стартпосте? и чем всё-таки не устраивает мой вариант? Ну во-первых, запрос сильно урезан, оставлено только существенное для того чтобы отладить и понять, почему два запроса вместе перестают выдавать правильный результат. Суть не в трехэтажности, а в том, что при соединении они перестают правильно работать. Вот полный текст запроса. Код: 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. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 10:48:06 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
что касается той темы, то этот вариант был взят: авторТ3: Для НЕПУСТЫХ отделов вывести ОДНОГО работника. Если двое и больше работников имеют одинаковые максимальные зарплаты то вывести первого по ИД. С2: MAX(salary) подселект в WHERE блоке -- решение для Т3 Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 10:56:20 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
tanglirsvnvladНа это целая тема былану и где в факе такая трёхэтажная хренотень, как в стартпосте? и чем всё-таки не устраивает мой вариант? Кстати ваш вариант показывает другой результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 11:00:51 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
В принципе ответ на поставленный вопросsvnvladКак получить независимые результаты на вчера и сегодня?очень простой - надо фактически выполнить ДВА запроса, но их результаты можно выдать как один - либо через юнион олл, либо как "селект (запрос1), (запрос2)" (в вашем случае это возможно, т.к. они возвращают скаляр). Странно, что мой вариант возвращает не то, что должно быть по заданию. В таблице остатков может быть несколько записей по одному товару с одной и той же датой/временем? Если не может, то вы уверены, что ваш запрос считает всё правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 12:19:44 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
tanglirСтранно, что мой вариант возвращает не то, что должно быть по заданию.хотя.. ничего странного, он же вообще неправильный что-то заработался я. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 12:22:04 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
tanglirВ таблице остатков может быть несколько записей по одному товару с одной и той же датой/временем? Теоретически нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 12:54:42 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
tanglirВ принципе ответ на поставленный вопросsvnvladКак получить независимые результаты на вчера и сегодня?очень простой - надо фактически выполнить ДВА запроса, но их результаты можно выдать как один - либо через юнион олл, либо как "селект (запрос1), (запрос2)" (в вашем случае это возможно, т.к. они возвращают скаляр). Странно, что мой вариант возвращает не то, что должно быть по заданию. В таблице остатков может быть несколько записей по одному товару с одной и той же датой/временем? Если не может, то вы уверены, что ваш запрос считает всё правильно? Не пойму пока, как объединить юнионами. Нужно чтобы было так: ГРУЗ ВЧЕРА СЕГОДНЯ Уголь 1500 1700 Щебень 1250 1120 ... Т.е. сгруппировано по типу груза. В одной строке и вчерашний и сегодняшний результат. И что именно повторять в запросах - все те JOIN-ы тянуть за собой оба раза? Там фактически надо объединять 8 запросов. (2 это я привел минимум), значит все джойны 8 раз тянуть за собой? вот эти: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 13:01:00 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
CURDATE() это тип дата, сравнение будет неверным с ДатаТайм в любом случае лишнее преобразование типов ни к чему я показал NOW() в качестве однотипного значения зачем SUM() мне непонятно, если у вас одна запись остатков в один день на товар (я так понял), в любом случае выбираем последний датированный остаток... (или посл.по id ?) смысл такой же как и все выше Код: sql 1. 2. 3. 4. 5. 6. 7. проверьте данные по этим запросам (за вчера и сегодня) и LEFT JOIN к основным данным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2015, 03:39:15 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
svnvladНе пойму пока, как объединить юнионами. Нужно чтобы было так: ГРУЗ ВЧЕРА СЕГОДНЯдобавляете к результату каждого запроса его "номер", потом сворачиваете через групбай+кейс: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2015, 05:36:44 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
tanglirsvnvladНе пойму пока, как объединить юнионами. Нужно чтобы было так: ГРУЗ ВЧЕРА СЕГОДНЯдобавляете к результату каждого запроса его "номер", потом сворачиваете через групбай+кейс: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Как отсеять строки с нулевыми значениями? Т.е. надо чтобы выводились только те, где вчера не нулевое или сегодня не нулевое. Потому что нулевых там слишком много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2016, 09:42:02 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
svnvlad, сделайте отдельную таблицу остатков с записями на каждый день на каждый товар. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2016, 14:59:32 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
javajdbcsvnvlad, сделайте отдельную таблицу остатков с записями на каждый день на каждый товар. Эта таблица называется cargo_remains ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2016, 15:22:33 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
svnvladjavajdbcsvnvlad, сделайте отдельную таблицу остатков с записями на каждый день на каждый товар. Эта таблица называется cargo_remains это не то -- нужна на трансакционная таблица а накопительная таблица -- 1 (один) последний рекорд на товар в день. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2016, 16:18:40 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
javajdbcsvnvladпропущено... Эта таблица называется cargo_remains это не то -- нужна на трансакционная таблица а накопительная таблица -- 1 (один) последний рекорд на товар в день. Эту проблему решил уже с помощью FastReport-а, ставлю фильтр в скрипте. Теперь другая проблема. Не выдает правильные данные по приходу и расходу по типам транспорта. Может быть это из-за того, что вложенные селекты должны как-то координироваться с общей группировкой? GROUP BY cn.id, pcc.placement_id Большинство данных выдает по нулям, хотя на самом деле в течение дня был и приход, и расход транспорта. Код: 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. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2016, 09:38:03 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
Т.е. итоговая группировка идет по двум полям: Номенклатура груза и номер склада. А во вложенных селектах как-то не учитывается, что в основном запросе идет группировка. Или я не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2016, 09:39:29 |
|
||
|
Чудной запрос по остаткам на вчерашний и сегодняшний день
|
|||
|---|---|---|---|
|
#18+
А в принципе вообще должна быть группировка по 3-м полям: 1. Номенклатура груза. 2. Номер склада. 3. Грузовладелец. Туман что-то в голове насчет того, как работает GROUP BY. Что происходит в этом случае с вложенными селектами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2016, 09:41:09 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39139748&tid=1832283]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
173ms |
get topic data: |
8ms |
get forum data: |
1ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 462ms |

| 0 / 0 |
