|
|
|
Добавление отсутствующих дат в результат запроса group by
|
|||
|---|---|---|---|
|
#18+
Есть запрос расчета продаж select doc_date, sum(quantity) sq, sum(price) sp from my_table group by doc_date Если за к.л. дату не было продаж, то строка с этой датой отсутствует в результате, что в общем-то верно :-) . Но вот неугомонному начальству необходимо сделать так, чтобы эта дата (по которой нет продаж) была, а sq и sp были нулевыми. А вот как... Oracle 8.1.7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2003, 04:59 |
|
||
|
Добавление отсутствующих дат в результат запроса group by
|
|||
|---|---|---|---|
|
#18+
Делай таблицу (например, Calendar) и вяжись с ней с (+) по дате. Таблицу, соответственно, заполняй датами :) Можно сделать функцию, создающую временную таблицу за нужный тебе период, если не хочешь место лишнее пользовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2003, 05:40 |
|
||
|
Добавление отсутствующих дат в результат запроса group by
|
|||
|---|---|---|---|
|
#18+
Наверняка у вас есть таблица курсов валют на каждый день. Соедени с этой таблицей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2003, 09:00 |
|
||
|
Добавление отсутствующих дат в результат запроса group by
|
|||
|---|---|---|---|
|
#18+
Если 9-ка глянь в сторону табличных функций. Тогда обойдешься без временных таблиц и прочих извратов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2003, 09:31 |
|
||
|
Добавление отсутствующих дат в результат запроса group by
|
|||
|---|---|---|---|
|
#18+
To softbuilder@inbox.ru: Я уже думал о табличке с курсами, но курсы валют на выходные и дни, когда торгов на бирже нет, где брать ? :-) Сделаю первый вариант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2003, 11:39 |
|
||
|
Добавление отсутствующих дат в результат запроса group by
|
|||
|---|---|---|---|
|
#18+
У меня это реализовано так: Когда выставляется курс - он ставится не только на текущий день, а на достаточный период вперёд(скажем на неделю). Поэтому курс пятницы действует и на последующие дни в которые он непосредственно не выставляется. В понедельник же курс выставляется вновь. Всё очень просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2003, 11:54 |
|
||
|
Добавление отсутствующих дат в результат запроса group by
|
|||
|---|---|---|---|
|
#18+
В схеме ORDSYS есть такой волшебный пакет - CALENDAR. Это спасет отца русской демократии. С результатами его работы можно сделать очень многое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2003, 12:03 |
|
||
|
Добавление отсутствующих дат в результат запроса group by
|
|||
|---|---|---|---|
|
#18+
To _VVP_: Не ставил я Time Series, поэтому увы, нет у меня ни пользователя, ни пакета... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2003, 07:23 |
|
||
|
Добавление отсутствующих дат в результат запроса group by
|
|||
|---|---|---|---|
|
#18+
Я юзаю такую шнягу select to_date('01.01.2003','dd.mm.yyyy')+rownum-1 from all_objects PS Вместо 01.01.2003 легко вытащить любую дату в зависимости от потребностей. select count(*) from all_objects у меня возвращает ~30 000 записей, такчто зватит надолго ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2003, 10:39 |
|
||
|
Добавление отсутствующих дат в результат запроса group by
|
|||
|---|---|---|---|
|
#18+
Raven_13 : select to_date('01.01.2003','dd.mm.yyyy')+rownum-1 from all_objects select count(*) from all_objects у меня возвращает ~30 000 записей, такчто зватит надолго В смысле - надолго? А зачем тебе тащить 30000 записей? Обычно тащится не более 30-365 записей, в редких случаях анализ доходит до 10 лет, т.е. 3650 дней. Да и вязка по ограниченному количеству записей, однако быстрее происходит и дату в to_date() можно ставить из параметра. Это хорошо, когда ты вяжешь табличку в несколько тысяч записей, а когда дело доходит до нормальных объемов данных, приходится еще и индексы навешивать. В таблице "календарь" можно еще и всякие признаки хранить и курсы те же вязать к ней, чтобы получать курс за день между торговыми сессиями на ММВБ (в "дырках"), ставить признак, был ли день рабочим, признак конца недели/месяца/квартала/полугодия/года, если нет подобных функций в языке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2003, 07:01 |
|
||
|
Добавление отсутствующих дат в результат запроса group by
|
|||
|---|---|---|---|
|
#18+
В общем, сделал type vt_date as table of date и function date_table(p_from_date in date, p_to_date in date) return vt_date. И сколько дней надо, столько и получаю. To softbuilder@inbox.ru: У меня немного другой подход к работе с курсами. Есть две таблички - REF_CURRENCIES ( ID NUMBER , NAME VARCHAR2 (25), SHORT_NAME CHAR (3), RATE NUMBER (14,5), LAST_UPDATE DATE); REF_CURRENCIES_HISTORY ( ID_CURRENCY NUMBER, HISTORY_DATE DATE , RATE NUMBER (14,5)); CREATE OR REPLACE TRIGGER ABT.CURRENCYHIST AFTER INSERT OR UPDATE OF RATE ON ABT.REF_CURRENCIES REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW BEGIN update ref_currencies_history set rate=:new.rate where id_currency=:new.id and history_date=trunc(sysdate,'J'); if sql%notfound then insert into ref_currencies_history(id_currency,rate) values(:new.id,:new.rate); end if; END; Ну и при выборке курса ищем по дате :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2003, 03:31 |
|
||
|
Добавление отсутствующих дат в результат запроса group by
|
|||
|---|---|---|---|
|
#18+
У меня это сделано примерно таким образом: Создаем таблицу и запихивает туда значения 0,1,2, ...1000 Код: plaintext 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. Затем крепим к ней продажи за даты Код: plaintext 1. 2. 3. 4. Все проверенно в бою ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2003, 13:39 |
|
||
|
Добавление отсутствующих дат в результат запроса group by
|
|||
|---|---|---|---|
|
#18+
ArchiMage А что трудно в данном запросе ограничить возвращаемый резальт ??? Кто говорил что все надо тащить ??? С синтаксисом where знакомы ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2003, 18:52 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32126994&tid=1991256]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
160ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 453ms |

| 0 / 0 |
