powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / диапазон дат размножить на каждого клиента
6 сообщений из 6, страница 1 из 1
диапазон дат размножить на каждого клиента
    #39754366
kaldorey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Есть таблица
Date Name Value01.05.2018Смирнов1201.08.2018Смирнов3401.06.2018Петров5601.05.2018Петров78
Необходимо в разных колонках указать у клиентов эти же значения, только в следующем и предыдущем месяцах.
Примерно так:
Date Name Value Value_next Value_prev01.01.2018Петров01.02.2018Петров01.03.2018Петров01.04.2018Петров7801.05.2018Петров785601.06.2018Петров567801.07.2018Петров5601.08.2018Петров01.09.2018Петров01.10.2018Петров01.11.2018Петров01.12.2018Петров01.01.2018Смирнов01.02.2018Смирнов01.03.2018Смирнов01.04.2018Смирнов1201.05.2018Смирнов1201.06.2018Смирнов1201.07.2018Смирнов3401.08.2018Смирнов3401.09.2018Смирнов3401.10.2018Смирнов01.11.2018Смирнов01.12.2018Смирнов

Отображать значения планирую по логическому окну, но не могу понять, как корректно размножить даты, чтобы на каждого клиента было ровно 12 месяцев. Пока только версия - надо пройтись по таблице клиентов с distinct name и просто перемножить с диапазоном дат, а потом left join значения, но может есть решение, чтобы не прогонять таблицу лишний раз? Версия 12.2

Наборы данных:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
--Клиенты
select date '2018-05-01' dt, 'Смирнов' name, 12 value from dual union all
select date '2018-08-01' dt, 'Смирнов' name, 34 value from dual union all
select date '2018-06-01' dt, 'Петров'  name, 56 value from dual union all
select date '2018-05-01' dt, 'Петров'  name, 78 value from dual

--Даты
select
add_months(date '2018-01-01', level - 1) dt
from dual
connect by add_months(date '2018-01-01', level - 1) <= trunc(sysdate, 'mm')
...
Рейтинг: 0 / 0
диапазон дат размножить на каждого клиента
    #39754367
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kaldorey,

partition join клиентов на таблицу календарь...
...
Рейтинг: 0 / 0
диапазон дат размножить на каждого клиента
    #39754372
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kaldorey,

что значит не прогонять?

ps
select cl.*, case when ...

....
stax
...
Рейтинг: 0 / 0
диапазон дат размножить на каждого клиента
    #39754377
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина Аннаkaldorey,

partition join клиентов на таблицу календарь...
примерно вот так, если кому-то непонятно о чем речь:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with c as (
--Клиенты
select date '2018-05-01' dt, 'Смирнов' name, 12 value from dual union all
select date '2018-08-01' dt, 'Смирнов' name, 34 value from dual union all
select date '2018-06-01' dt, 'Петров'  name, 56 value from dual union all
select date '2018-05-01' dt, 'Петров'  name, 78 value from dual
),
dt as (
select
add_months(date '2018-01-01', level - 1) dt
from dual
connect by add_months(date '2018-01-01', level - 1) <= trunc(sysdate, 'mm'))
--
select * 
  from c partition by (c.name)
 right join dt
    on c.dt = dt.dt 
...
Рейтинг: 0 / 0
диапазон дат размножить на каждого клиента
    #39754380
kaldorey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина Анна,

Спасибо большое! Теперь знаю чуть больше
...
Рейтинг: 0 / 0
диапазон дат размножить на каждого клиента
    #39754383
kaldorey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

я полагал, что научился задавать вопросы. Буду учиться дальше
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / диапазон дат размножить на каждого клиента
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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