powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Помогите с запросом.
11 сообщений из 11, страница 1 из 1
Помогите с запросом.
    #36331105
1234567954521
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый.
Как из

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with tbl (dt,qty) as ( 
values (date('2009-01-01'), 200 )
union all
values (date('2009-01-02'), 0 )
union all
values (date('2009-01-03'), 300 )
union all
values (date('2009-01-04'), 0 )
union all
values (date('2009-01-05'), 0 )
union all
values (date('2009-01-06'), 600 )
)
select * from tbl order by dt asc

получить

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with tbl (dt,qty) as ( 
values (date('2009-01-01'), 200 )
union all
values (date('2009-01-02'), 200 )
union all
values (date('2009-01-03'), 300 )
union all
values (date('2009-01-04'), 300 )
union all
values (date('2009-01-05'), 300 )
union all
values (date('2009-01-06'), 600 )
)
select * from tbl order by dt asc

?
Вроде как рекурсия должна быть, но с ней у меня пока что не очень. не могу понять как задать критерий выхода. Пока вот что получилось:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with tbl (dt,qty) as ( 
values (date('2009-01-01'), 200 )
union all
values (date('2009-01-02'), 0 )
union all
values (date('2009-01-03'), 300 )
union all
values (date('2009-01-04'), 0 )
union all
values (date('2009-01-05'), 0 )
union all
values (date('2009-01-06'), 600 )
union all
select dt- 1  day,qty from tbl t1 where t1.qty!= 0  and t1.dt- 1  day>='2009-01-01'
)
select * from tbl order by dt asc

Но мне нужно каждой дате с нулевым количеством присваивать количество предыдущей даты с ненулевым количеством пока в следующей кол-во не станет ненулевым.
Первая дата всегда с ненулевым количеством.
Просто доки все закрыты сейчас, есть доступ только сюда.
...
Рейтинг: 0 / 0
Помогите с запросом.
    #36331160
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Код: plaintext
1.
2.
3.
4.
5.
6.
with tbl (dt,qty) as ( 
...
)
select dt, max(qty) over (order by dt) qty
from tbl 
order by dt
...
Рейтинг: 0 / 0
Помогите с запросом.
    #36331162
12321324564
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Точнее так выглядит последний запрос



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with tbl (dt,qty) as ( 
values (date('2009-01-01'), 200 )
union all
values (date('2009-01-02'), 0 )
union all
values (date('2009-01-03'), 300 )
union all
values (date('2009-01-04'), 0 )
union all
values (date('2009-01-05'), 0 )
union all
values (date('2009-01-06'), 600 )
union all
select dt+ 1  day,qty from tbl t1 where t1.qty!= 0  and t1.dt+ 1  day<='2009-01-06'-- and (select qty from tbl where dt=t1.dt- 1 day)=0 
)
select * from tbl order by dt asc
...
Рейтинг: 0 / 0
Помогите с запросом.
    #36331229
23132154
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Близко но не совсем то. Видимо немного некорректные данные дал. В случае если:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
with tbl (dt,qty) as ( 
values (date('2009-01-01'), 200 )
union all
values (date('2009-01-02'), 0 )
union all
values (date('2009-01-03'), 300 )
union all
values (date('2009-01-04'), 0 )
union all
values (date('2009-01-05'), 0 )
union all
values (date('2009-01-06'), 600 )
union all
values (date('2009-01-07'), 100 )
union all
values (date('2009-01-08'), 0 )
union all
select dt+ 1  day,qty from tbl t1 where t1.qty!= 0  and t1.dt+ 1  day<='2009-01-08' 
)
select distinct dt, max(qty) over (order by dt) qty
from tbl 
order by dt

2009-01-08 должно в qty стоять 100. А у нас 600 :(
...
Рейтинг: 0 / 0
Помогите с запросом.
    #36331238
456456456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну и 2009-01-07 тоже 100
...
Рейтинг: 0 / 0
Помогите с запросом.
    #36331282
324234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Без курсора получается никак?
...
Рейтинг: 0 / 0
Помогите с запросом.
    #36331328
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with tbl (dt,qty) as (values 
  (date('2009-01-01'), 200 )
, (date('2009-01-02'), 0 )
, (date('2009-01-03'), 300 )
, (date('2009-01-04'), 0 )
, (date('2009-01-05'), 0 )
, (date('2009-01-06'), 600 )
, (date('2009-01-07'), 100 )
, (date('2009-01-08'), 0 )
)
select 
  dt
, case qty when  0  then (select qty from tbl where dt<t.dt and qty<> 0  order by dt desc fetch first  1  row only) else qty end
from tbl t
order by dt
...
Рейтинг: 0 / 0
Помогите с запросом.
    #36331616
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если версия db2 9.5, то:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with tbl (dt,qty) as (values 
  (date('2009-01-01'), 200 )
, (date('2009-01-02'), 0 )
, (date('2009-01-03'), 300 )
, (date('2009-01-04'), 0 )
, (date('2009-01-05'), 0 )
, (date('2009-01-06'), 600 )
, (date('2009-01-07'), 100 )
, (date('2009-01-08'), 0 )
)
select 
  dt
, last_value(nullif(qty,  0 ), 'IGNORE NULLS') over (order by dt) qty
from tbl t
order by dt
...
Рейтинг: 0 / 0
Помогите с запросом.
    #36331802
укеу435345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что за функция такая last_value ? Что то на publib.boulder.ibm.com не нашел ничего про нее.
У меня восьмерка.
предыдущий вариант через раз ругается на
[IBM][CLI Driver][DB2/NT64] SQL0206N "DT" недопустимо в контексте, где оно используется. SQLSTATE=42703

Разбираюсь пока.
В любом случае спасибо, Марк!
...
Рейтинг: 0 / 0
Помогите с запросом.
    #36331831
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
укеу435345Что за функция такая last_value ? Что то на publib.boulder.ibm.com не нашел ничего про нее.
У меня восьмерка.
предыдущий вариант через раз ругается на
[IBM][CLI Driver][DB2/NT64] SQL0206N "DT" недопустимо в контексте, где оно используется. SQLSTATE=42703
Как это "через раз ругается"?
Один и тот же запрос раз отрабатывает, а раз нет?
На моей v8 работает каждый раз. :)
OLAP specifications .
...
Рейтинг: 0 / 0
Помогите с запросом.
    #36331874
Елки, видать конец рабочего дня. Действительно все нормально работает!) Спасибо еще раз!)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Помогите с запросом.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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