powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / как "слить"-объединить стоящие рядом по дате записи
5 сообщений из 30, страница 2 из 2
как "слить"-объединить стоящие рядом по дате записи
    #38365164
skibars
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark,

SQLDA Information
sqldaid : SQLDA sqldabc: 896 sqln: 20 sqld: 8
Column Information
sqltype sqllen sqlname.data sqlname.length
-------------------- ------ ------------------------------ --------------
501 SMALLINT 2 REG 3
453 CHARACTER 6 ND 2
453 CHARACTER 4 STKT 4
485 DECIMAL 3, 0 NSPIS2 6
485 DECIMAL 1, 0 SEVER 5
385 DATE 10 NPER 4
385 DATE 10 KPER 4
497 INTEGER 4 S1D 3
...
Рейтинг: 0 / 0
как "слить"-объединить стоящие рядом по дате записи
    #38365196
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skibars,

Порядок полей неправильный
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with a (lvl, reg,nd, stkt,nspis2,sever, nper,kper, s1d) as
with a (lvl, reg,nd, nper,kper, stkt,nspis2,sever, s1d) as
(select 1, reg,nd, stkt,nspis2,sever, nper,kper,s1d from loz11 t1
where reg=6 and nd='129241' and
not exists (select 1 from loz11 t2 where (t2.reg,t2.nd,t2.stkt,t2.nspis2,t2.sever)=(t1.reg,t1.nd,t1.stkt,t1.nspis2,t1.sever) and t2.kper=t1.nper-1 day)
union all
select a.lvl+1, a.reg,a.nd, a.stkt,a.nspis2,a.sever, a.nper,t.kper,a.s1d+t.s1d from a, loz11 t
where (t.reg,t.nd,t.stkt,t.nspis2,t.sever)=(a.reg,a.nd,a.stkt,a.nspis2,a.sever) and t.nper=a.kper + 1 day)
select a.* from a join
(select max(lvl) lvl, reg,nd, stkt,nspis2,sever, nper from a group by reg,nd, stkt,nspis2,sever, nper) g
on g.lvl=a.lvl and (g.reg,g.nd,g.stkt,g.nspis2,g.sever,g.nper)=(a.reg,a.nd,a.stkt,a.nspis2,a.sever,a.nper)
...
Рейтинг: 0 / 0
как "слить"-объединить стоящие рядом по дате записи
    #38365211
skibars
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein ,
ура! всё заработало, весьма благодарен, проверил и для трёх сумм вместо одной (там только надо чтоб поля сумм были не NULL, но это мелочь)
...
Рейтинг: 0 / 0
как "слить"-объединить стоящие рядом по дате записи
    #38365594
skibars...все эти поля - ключи для группировки: reg,nd,st,ns,sev

Тогда в моем решение расширяем конструкцию окна разбивкой на группы и включаем "ключевые поля" в условия итоговой группировки:

Код: 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.
--
-- Тестовый набор данных 
-- (сорри за немного оракловый акцент, но он-лайн тестовую базу DB2 найти не смог):
with
  t11_dopl(reg, nd, np, kp, st, ns, sev) as 
    (
      select 6, 129241, date'1990-02-12', date'1991-10-14', '1-2', 0, 1 from dual union all
      select 6, 129241, date'1991-10-15', date'1995-09-30', '1-3', 0, 1 from dual union all
      select 6, 129241, date'1995-11-04', date'2001-12-31', '1-2', 0, 1 from dual union all
      select 6, 129241, date'2002-01-01', date'2009-12-31', '1-2', 0, 1 from dual
    )
--
-- Основной запрос (вроде все конструкции аналогичны "местному" синтаксису):
select reg, nd, min(np) as x_np, max(kp) as x_kp, st, ns, sev
  from (
         select reg, nd, st, ns, sev, np, kp, 
                sum(sog) over(partition by reg, nd, st, ns, sev
                                  order by np,kp) as grp_id
           from (
                  select reg, nd, st, ns, sev, np, kp, 
                         case 
                           when np <= max(kp + 1 day) over(partition by reg, nd, st, ns, sev
                                                           order by np, kp 
                                                            rows between unbounded preceding
                                                             and 1 preceding) 
                             then 0 
                           else 1 
                         end as sog -- sog = start_of_group :)
                    from t11_dopl
                )
       )
 group by reg, nd, st, ns, sev, grp_id
 order by reg, nd, st, ns, sev, x_np

on-line проверка на sqlfiddle.com
...
Рейтинг: 0 / 0
как "слить"-объединить стоящие рядом по дате записи
    #38371551
skibars
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

dual - неизвестное имя для db2, нашёл замену - SYSIBM.SYSDUMMY1 :). работает! целиком тащить из таблицы пока не пробовал.
ну и ещё ведь надо из других полей дни суммировать, ну это уже не горит... будет интересно и время - сам попробую дополнить.
Благодарю!
...
Рейтинг: 0 / 0
5 сообщений из 30, страница 2 из 2
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / как "слить"-объединить стоящие рядом по дате записи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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