Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Добавление отсутствующих дат в результат запроса group by / 14 сообщений из 14, страница 1 из 1
25.03.2003, 04:59
    #32126144
Виктор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление отсутствующих дат в результат запроса group by
Есть запрос расчета продаж
select doc_date, sum(quantity) sq, sum(price) sp from my_table group by doc_date
Если за к.л. дату не было продаж, то строка с этой датой отсутствует в результате, что в общем-то верно :-) .
Но вот неугомонному начальству необходимо сделать так, чтобы эта дата (по которой нет продаж) была, а sq и sp были нулевыми.
А вот как...
Oracle 8.1.7
...
Рейтинг: 0 / 0
25.03.2003, 05:40
    #32126149
ArchiMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление отсутствующих дат в результат запроса group by
Делай таблицу (например, Calendar) и вяжись с ней с (+) по дате.
Таблицу, соответственно, заполняй датами :)
Можно сделать функцию, создающую временную таблицу за нужный тебе период, если не хочешь место лишнее пользовать.
...
Рейтинг: 0 / 0
25.03.2003, 09:00
    #32126205
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление отсутствующих дат в результат запроса group by
Наверняка у вас есть таблица курсов валют на каждый день.
Соедени с этой таблицей.
...
Рейтинг: 0 / 0
25.03.2003, 09:31
    #32126242
Alexander Sobyanin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление отсутствующих дат в результат запроса group by
Если 9-ка глянь в сторону табличных функций. Тогда обойдешься без временных таблиц и прочих извратов.
...
Рейтинг: 0 / 0
25.03.2003, 11:39
    #32126373
Виктор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление отсутствующих дат в результат запроса group by
To softbuilder@inbox.ru:
Я уже думал о табличке с курсами, но курсы валют на выходные и дни, когда торгов на бирже нет, где брать ? :-)
Сделаю первый вариант
...
Рейтинг: 0 / 0
25.03.2003, 11:54
    #32126390
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление отсутствующих дат в результат запроса group by
У меня это реализовано так:
Когда выставляется курс - он ставится не только на текущий день, а на достаточный период вперёд(скажем на неделю). Поэтому курс пятницы действует и на последующие дни в которые он непосредственно не выставляется. В понедельник же курс выставляется вновь.
Всё очень просто.
...
Рейтинг: 0 / 0
25.03.2003, 12:03
    #32126402
_VVP_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление отсутствующих дат в результат запроса group by
В схеме ORDSYS есть такой волшебный пакет - CALENDAR. Это спасет отца русской демократии. С результатами его работы можно сделать очень многое.
...
Рейтинг: 0 / 0
26.03.2003, 07:23
    #32126994
Виктор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление отсутствующих дат в результат запроса group by
To _VVP_:
Не ставил я Time Series, поэтому увы, нет у меня ни пользователя, ни пакета... :-)
...
Рейтинг: 0 / 0
26.03.2003, 10:39
    #32127120
raven_13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление отсутствующих дат в результат запроса group by
Я юзаю такую шнягу

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 записей, такчто зватит надолго
...
Рейтинг: 0 / 0
27.03.2003, 07:01
    #32127810
ArchiMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление отсутствующих дат в результат запроса group by
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() можно ставить из параметра.

Это хорошо, когда ты вяжешь табличку в несколько тысяч записей, а когда дело доходит до нормальных объемов данных, приходится еще и индексы навешивать.

В таблице "календарь" можно еще и всякие признаки хранить и курсы те же вязать к ней, чтобы получать курс за день между торговыми сессиями на ММВБ (в "дырках"), ставить признак, был ли день рабочим, признак конца недели/месяца/квартала/полугодия/года, если нет подобных функций в языке.
...
Рейтинг: 0 / 0
28.03.2003, 03:31
    #32128620
Виктор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление отсутствующих дат в результат запроса group by
В общем, сделал 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;
Ну и при выборке курса ищем по дате :-)
...
Рейтинг: 0 / 0
28.03.2003, 13:39
    #32129008
acidbaba
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление отсутствующих дат в результат запроса group by
У меня это сделано примерно таким образом:
Создаем таблицу и запихивает туда значения 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.
CREATE TABLE PIVOT (X NUMBER)
/
INSERT INTO PIVOT
SELECT huns.x+tens.x+ones.x FROM
  (SELECT  0  x FROM dual
   UNION SELECT  1  FROM dual
   UNION SELECT  2  FROM dual
   UNION SELECT  3  FROM dual
   UNION SELECT  4  FROM dual
   UNION SELECT  5  FROM dual
   UNION SELECT  6  FROM dual
   UNION SELECT  7  FROM dual
   UNION SELECT  8  FROM dual
   UNION SELECT  9  FROM dual) ones,
  (SELECT  0  x FROM dual
   UNION SELECT  10  FROM dual
   UNION SELECT  20  FROM dual
   UNION SELECT  30  FROM dual
   UNION SELECT  40  FROM dual
   UNION SELECT  50  FROM dual
   UNION SELECT  60  FROM dual
   UNION SELECT  70  FROM dual
   UNION SELECT  80  FROM dual
   UNION SELECT  90  FROM dual) tens,
  (SELECT  0  x FROM dual
   UNION SELECT  100  FROM dual
   UNION SELECT  200  FROM dual
   UNION SELECT  300  FROM dual
   UNION SELECT  400  FROM dual
   UNION SELECT  500  FROM dual
   UNION SELECT  600  FROM dual
   UNION SELECT  700  FROM dual
   UNION SELECT  800  FROM dual
   UNION SELECT  900  FROM dual) huns


Затем крепим к ней продажи за даты

Код: plaintext
1.
2.
3.
4.
select doc_date, NVL(sum(quantity),  0 ) sq, NVL(sum(price),  0 ) sp from pivot, p, my_table 
where doc_date(+)=TO_DATE('01-01-03', 'DD-MM-YY')+p.x and
          p.x< 100 
group by doc_date 

Все проверенно в бою
...
Рейтинг: 0 / 0
30.03.2003, 18:52
    #32129760
raven_13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление отсутствующих дат в результат запроса group by
ArchiMage
А что трудно в данном запросе ограничить возвращаемый резальт ???
Кто говорил что все надо тащить ??? С синтаксисом where знакомы ???
...
Рейтинг: 0 / 0
30.03.2003, 19:37
    #32129763
Oracle X-pert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление отсутствующих дат в результат запроса group by
Samyi prostoi sposob::
1. sozdat' "DIMENTION" na date.
2. Select use "GROUPING"
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Добавление отсутствующих дат в результат запроса group by / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]