powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите разрешить задачу !
12 сообщений из 12, страница 1 из 1
Помогите разрешить задачу !
    #39548325
Wild-Jack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, Комрады !

Возник вопрос. У меня есть таблица и данные с остатками сумм в ней, в праздничные дни и в воскресенье данные в ней отсутствуют, т.к. наша организация не работает. Для формирования среднего баланса необходимо в праздничные дни или выходные заливать данные последнего рабочего дня перед выходными. Т.е. если у нас день недели = воскресенье, я беру данные за 18.03.2017 и заливаю их за 19.03.2017. Вопрос как мне сделать аналогично с праздниками, которые длятся по несколько дней, т.е. за 21.03.2017, 22.03.2017 и 23.03.2017 число должны залиться данные за 20.03.2017. Думаю тут должна подойти аналитическая функция, но какая ?

DATE_REPLACE = DATE_CALENDAR - 1
EQ - 1 - обычный день, 2 - праздник или выходной

DATE_CALENDAR DATE_REPLACE DAY_NAME DAY_NUMBER EQ

17.03.2017 16.03.2017 ПТ 5 1
18.03.2017 17.03.2017 СБ 6 1
19.03.2017 18.03.2017 ВС 7 2
20.03.2017 19.03.2017 ПН 1 1
21.03.2017 20.03.2017 ВТ 2 2
22.03.2017 21.03.2017 СР 3 2
23.03.2017 22.03.2017 ЧТ 4 2
24.03.2017 23.03.2017 ПТ 5 1
...
Рейтинг: 0 / 0
Помогите разрешить задачу !
    #39548330
Wild-Jack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DATE_CALENDAR DATE_REPLACE DAY_NAME DAY_NUMBER EQ17.03.2017 16.03.2017 ПТ 5 118.03.2017 17.03.2017 СБ 6 119.03.2017 18.03.2017 ВС 7 220.03.2017 19.03.2017 ПН 1 121.03.2017 20.03.2017 ВТ 2 222.03.2017 21.03.2017 СР 3 223.03.2017 22.03.2017 ЧТ 4 224.03.2017 23.03.2017 ПТ 5 1
...
Рейтинг: 0 / 0
Помогите разрешить задачу !
    #39548335
Wild-Jack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечный результат должен получиться таким -

DATE_CALENDAR DATE_REPLACE EQ17.03.2017 17.03.2017 118.03.2017 18.03.2017 119.03.2017 18.03.2017 220.03.2017 19.03.2017 121.03.2017 19.03.2017 222.03.2017 19.03.2017 223.03.2017 19.03.2017 224.03.2017 24.03.2017 1
...
Рейтинг: 0 / 0
Помогите разрешить задачу !
    #39548342
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wild-Jack,
last_value ignore nulls

....
stax
...
Рейтинг: 0 / 0
Помогите разрешить задачу !
    #39548379
Wild-Jack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StaxWild-Jack,
last_value ignore nulls

....
stax



Спасибо большое, Добрый человек !
Получилось !
...
Рейтинг: 0 / 0
Помогите разрешить задачу !
    #39556183
GroMoZeKazzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтобы не плодить темы с задачами, добавлю свои сюда.
Только приступил к изучению SQL, так что просьба не кидаться всяким несвежим :)
Есть таблица .
Вопросы:
1) Список идентификаторов клиентов, имеющих действующие договоры более чем в одном банке.
2) Список идентификаторов клиентов, имеющих договоры 3 разных типов в одном банке. Если клиент имеет по 3 разных типа договора в нескольких банках, он должен попасть в список только один раз.
3) Получить отчет со списком количества клиентов во всех банков в разрезе типов договоров. Учитывать только действующие договоры. Отчет должен содержать столбцы:
id_bank банк
type_id тип договора
num кол-во клиентов

4) Список открытых договоров, пронумерованных по порядку (1,2,3,... без пропусков номеров) для каждого банка. Эти номера не содержатся в таблице, т.е. должны быть вычисляемым полем. Т.е., №№ 1,2,3, ..., N для банка A, 1,2,3, ..., M для банка B, и т.д.
5) Написать запрос, выводящий список id клиентов у которых нет договоров в самом крупном банке (с максимальным кол-вом открытых договоров).
...
Рейтинг: 0 / 0
Помогите разрешить задачу !
    #39556233
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GroMoZeKazzz,

что не получается то?

.....
stax
...
Рейтинг: 0 / 0
Помогите разрешить задачу !
    #39556242
GroMoZeKazzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax , с третьим номером, вроде разобрался.
select c.id_bank, c.type_id, count(c.id_client) num from contract c
where c.stat = 1
group by c.type_id, c.id_bank
order by 2

Разбираюсь с первым пока.
Условие четвертого вообще не понял )
...
Рейтинг: 0 / 0
Помогите разрешить задачу !
    #39556254
GroMoZeKazzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С первым пока никак, но пятый, вроде поддался:
select c.id_bank from contract c group by c.id_bank
having count(c.type_id) = (select max(cnt) from (select count(c.id) as cnt from contract c group by c.id_bank))
...
Рейтинг: 0 / 0
Помогите разрешить задачу !
    #39556268
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GroMoZeKazzzС первым пока никак

более чем в одном банке - having count(distinct bank)>1

ps
5-й
еще раз проверьте решение
"... выводящий список id клиентов ..."
.....
stax
...
Рейтинг: 0 / 0
Помогите разрешить задачу !
    #39556285
GroMoZeKazzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Staxболее чем в одном банке - having count(distinct bank)>1
ps
5-й
еще раз проверьте решение
"... выводящий список id клиентов ..."
.....
stax
Да, в 5-м был малость невнимателен.
select c.id_client from contract c where c.id_bank not in (select c.id_bank from contract c group by c.id_bank
having count(c.type_id) = (select max(cnt) from (select count(c.id) as cnt from contract c group by c.id_bank)))

Благодарствую, за having count. Разобрался с №1 двумя способами:
select c.id_client from contract c
group by c.id_client having count(distinct(c.id_bank)) > 1
order by 1

select * from (
select c.id_client, count(c.id_bank) cnt from contract c
group by c.id_client
) cnt
where cnt.cnt > 1
order by 1
...
Рейтинг: 0 / 0
Помогите разрешить задачу !
    #39556301
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GroMoZeKazzz,

5-ку пилите
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 1  with contract (id, type_id, id_client,  id_bank , stat, ndog) as (
 2  select 1,1,10,100,1,1001 from dual union all
 3  select 1,1,11,100,1,1002 from dual union all
 4  select 1,1,12,100,1,1003 from dual union all
 5  select 1,1,10,101,1,1011 from dual union all
 6  select 1,1,10,101,1,1012 from dual union all
 7  select 1,1,11,101,1,1013 from dual union all
 8  select 1,1,10,102,1,1021 from dual union all
 9  select 1,1,14,102,1,1022 from dual union all
10  select 1,1,11,103,1,1031 from dual
11  )
12  --select * from contract
13  select c.id_client from contract c where c.id_bank not in (select c.id_bank from contract c group by c.id_bank
14* having count(c.type_id) = (select max(cnt) from (select count(c.id) as cnt from contract c group by c.id_bank)))
QL> /

ID_CLIENT
---------
       11
       14
       10



зы
a) групповые ф-ции могут быть вложенными max(count(...))
б) крупных банков может быть и несколько

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


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