|
|
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. То есть таблица: Дата С, Дата По, Сумма. Нужно сгруппировать помесячно: вывести кол-во записей и сумму на первое число каждого месяца. Делаю в духе проктологии по-моему, в голове крутится, что должна быть какая-то простая группировка без формирования набора месяцев, без sog, но как не соображу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2016, 20:47:10 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Туплю, А что смущает? Без набора месяцев не обойтись. И, соответственно, самое простое с набором месяцев это перемножить его на tab. Что и сделано. Если по производительности будет плохо, то оптимизировать можно через преобразование остатков в обороты. Но это уже другая история. Работать, вероятно, будет быстрее, но запрос получится сложнее. PS что такое sog? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2016, 22:42:49 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Смысл задачи умножать суммы на количество месяцев в периоде? Лучше бы ты привел эталонные данные и результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2016, 00:01:56 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
в поиск...Смысл задачи умножать суммы на количество месяцев в периоде? Лучше бы ты привел эталонные данные и результат. Нет. Задача ровно такая, как сформулирована. Тестовые данные и текущий результат тоже приведен. НесплюА что смущает? Без набора месяцев не обойтись. И, соответственно, самое простое с набором месяцев это перемножить его на tab. Что и сделано. Если по производительности будет плохо, то оптимизировать можно через преобразование остатков в обороты. Но это уже другая история. Работать, вероятно, будет быстрее, но запрос получится сложнее. PS что такое sog? Ок. Значит пусть так. sog - т.н. запрос со start of group обычно используемый для схлопывания диапазонов дат, но здесь он вообще не нужен конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2016, 00:19:48 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Туплю, можно попробовать так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. В этом случае отсутствует генерация полного набора дат по записанным в таблице периодам. Но присутствуют повышенные вложенность запроса и количество аналитических и агрегатных функций... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2016, 06:26:55 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Несплю, А вот и неплохой пример преобразования остатков в обороты, который продемонстрировал нам Добрый Э - Эх. Правда обороты у него называются "смена состояния". Теперь осталось умножить его результат на набор месяцев и получим искомое решение :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2016, 07:28:15 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Проснулся, сдается мне, спишь ты еще. Мой запрос возвращает ровно тот же результат, что и "проктологический" вариант ТС. А ТС, вроде как, утверждал, что результат запроса его устраивает, а не устраивает способ получения этого результата. Я показал немного другой способ. Но результат он дает такой же (ну там за небольшим исключением, которое нужно устранить при помощи HAVING) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2016, 07:45:06 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, Сам догадаешься, зачем нужен набор месяцев, или сразу объяснить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2016, 07:50:00 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Уже позавтракал, где ты увидел у автора набор месяцев? у него всё благополучно урезается условием d.mon between tab.dts and tab.dtf, которое успешно вырежет все впустую сгенерированные данные. и если между мин(dts) и макс(dtf) будут "дырки" в данных, то и на выходе ровно такое же рваное покрывало автор и получит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2016, 10:07:24 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, Как думаешь в чем будет разница между его и твоим запросом, если в качестве tab использовать Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2016, 10:34:18 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Туплю, Кстати, в наборе месяцев нужно поставить +2 вместо +1 Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2016, 10:48:33 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Мир, дружба, жвачка ) За дырки спасибо, Добрый Э - Эх, хорошее уточнение, они-то мне пригодятся, поэтому набор дат все-таки нужен походу. Насчет + 2 вполне возможно. Проверю, спасибо. Остановлюсь на изначальном варианте пока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2016, 12:03:48 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39257481&tid=1888070]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
203ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 193ms |
| total: | 454ms |

| 0 / 0 |
