powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORACLE PL/SQL,ЗАПРОС
12 сообщений из 12, страница 1 из 1
ORACLE PL/SQL,ЗАПРОС
    #39746606
sanzhar333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таблице U_TS, в столбце OPER_CODE поле "Прием", может повторяться нужно брать первый "Прием"(наверное нужно его отобрать по min(id).
С таблицы U_TS надо сделать выборку чтобы получить результат как в таблице R_TS.

Сначала идет группировка по дням ПЕРВОГО ПРИЕМА ПОСЫЛКИ.

Пример1.Допустим 10.12.2018 было принято 2 POSYLKI(a1,b2)

day0. день_приема. была вручена 1 POSYLKA из 2х. day0=(1*100)/2 = 50%
day1. день_приема+1день. была вручена 1 POSYLKA из 2х. day1=(1*100)/2 = 50%
day2.день_приема+2дней. не было вручений.
если все посылки за 10.12.2018 уже вручены далее ставим просто 100%(day3 = 100%,day4 = 100%... и.т.д)

Пример2.Допустим 12.12.2018 было принято 3 POSYLKI(c3,d4,e5)
day0. день_приема. была вручено 0 POSYLKA из 3х. day0=(0*100)/3 = 0%
day1. день_приема+1день. была вручена 1 POSYLKA из 3х. day1=(1*100)/3 = 33%
day2.день_приема+2дней. было вручено 2 POSYLKA их 3х. day2=(2*100)/3 = 67%
если все посылки за 12.12.2018 уже вручены далее ставим просто 100%(day3 = 100%,day4 = 100%... и.т.д)


Пример3.Допустим 16.12.2018 было принята 1 POSYLKI(f6)
day0. день_приема. была вручено 0 POSYLKA из 1х. day0=(0*100)/1 = 0%
day1. день_приема+1день. была вручена 1 POSYLKA из 1х. day1=(0*100)/1 = 0%
day2.день_приема+2дней. было вручено 2 POSYLKA их 1х. day2=(0*100)/1 = 0%
day3.день_приема+3дня.было вручено 1 POSYLKA их 1х. day3=(1*100)/1 = 100%
то есть если все посылки за 16.12.2018 уже вручены ставим просто 100%(day4 = 100%... и.т.д)
...
Рейтинг: 0 / 0
ORACLE PL/SQL,ЗАПРОС
    #39746613
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Студентам, желающим помощи

http://www.bugtraq.ru/forum/faq/general/smart-questions.html] Как правильно задавать вопросы

Мессир
1) Внятная постановка задачи, отчет в чем? инструмент то какой?
2) что хочешь получить
3) как пытался решить задачу
4) тестовые данные, в таком виде:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with mytable(id,fio) as (
select 1,'Ремарк, Эрих, Мария' from dual union all
select 2,'Фернандес, Перес, Владимир, Кастулович' from dual union all
select 3,'Хосуэ, Гонсалес, де Леон' from dual union all
select 4,'Карам, Абу, Иль, Хатаб' from dual
)
select id,fio from tytable;




p.s. Используй ТЭГ SRC для оформления
...
Рейтинг: 0 / 0
ORACLE PL/SQL,ЗАПРОС
    #39746614
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь помогут.
...
Рейтинг: 0 / 0
ORACLE PL/SQL,ЗАПРОС
    #39746620
sanzhar333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select 1 as id,to_date('10.12.2018 01:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'a1' as nomer_posylki,'Прием' as oper_code from dual union all
select 2 as id,to_date('10.12.2018 02:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'a1' as nomer_posylki,'Сортировка' as oper_code from dual union all
select 3 as id,to_date('10.12.2018 03:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'a1' as nomer_posylki,'Прием' as oper_code from dual union all
select 4 as id,to_date('10.12.2018 04:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'a1' as nomer_posylki,'Вручено' as oper_code from dual union all
select 5 as id,to_date('10.12.2018 01:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'b2' as nomer_posylki,'Прием' as oper_code from dual union all
select 6 as id,to_date('11.12.2018 02:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'b2' as nomer_posylki,'Вручено' as oper_code from dual union all
select 7 as id,to_date('12.12.2018 01:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'c3' as nomer_posylki,'Прием' as oper_code from dual union all
select 8 as id,to_date('13.12.2018 02:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'c3' as nomer_posylki,'Вручено' as oper_code from dual union all
select 9 as id,to_date('12.12.2018 01:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'d4' as nomer_posylki,'Прием' as oper_code from dual union all
select 10 as id,to_date('14.12.2018 02:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'d4' as nomer_posylki,'Вручено' as oper_code from dual union all
select 11 as id,to_date('12.12.2018 07:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'e5' as nomer_posylki,'Прием' as oper_code from dual union all
select 12 as id,to_date('12.12.2018 09:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'e5' as nomer_posylki,'Сортировка' as oper_code from dual union all
select 11 as id,to_date('12.12.2018 10:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'e5' as nomer_posylki,'Прием' as oper_code from dual union all
select 13 as id,to_date('14.12.2018 11:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'e5' as nomer_posylki,'Вручено' as oper_code from dual union all
select 14 as id,to_date('16.12.2018 01:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'f6' as nomer_posylki,'Прием' as oper_code from dual union all
select 15 as id,to_date('19.12.2018 02:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'f6' as nomer_posylki,'Вручено' as oper_code from dual 




Код: plsql
1.
2.
3.
select '10.12.18' as date_reg,2 as posylki,'50%' as day0,'50%' as day1,'100%' as day2,'100%' as day3,'100%' as day4,'100%' as day5 from dual union all
select '12.12.18' as date_reg,3 as posylki,'0%' as day0,'33%' as day1,'67%' as day2,'100%' as day3,'100%' as day4,'100%' as day5 from dual union all
select '16.12.18' as date_reg,1 as posylki,'0%' as day0,'0%' as day1,'0%' as day2,'100%' as day3,'100%' as day4,'100%' as day5 from dual
...
Рейтинг: 0 / 0
ORACLE PL/SQL,ЗАПРОС
    #39746953
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
with u_ts(id,dt,nn,oc) as (
select 1  ,to_date('10.12.2018 01:00:00','dd.mm.yyyy hh24:mi:ss') ,'a1'  ,'Прием'  from dual union all
select 2  ,to_date('10.12.2018 02:00:00','dd.mm.yyyy hh24:mi:ss') ,'a1'  ,'Сортировка'  from dual union all
select 3  ,to_date('10.12.2018 03:00:00','dd.mm.yyyy hh24:mi:ss') ,'a1'  ,'Прием'  from dual union all
select 4  ,to_date('10.12.2018 04:00:00','dd.mm.yyyy hh24:mi:ss') ,'a1'  ,'Вручено'  from dual union all
select 5  ,to_date('10.12.2018 01:00:00','dd.mm.yyyy hh24:mi:ss') ,'b2'  ,'Прием'  from dual union all
select 6  ,to_date('11.12.2018 02:00:00','dd.mm.yyyy hh24:mi:ss') ,'b2'  ,'Вручено'  from dual union all
select 7  ,to_date('12.12.2018 01:00:00','dd.mm.yyyy hh24:mi:ss') ,'c3'  ,'Прием'  from dual union all
select 8  ,to_date('13.12.2018 02:00:00','dd.mm.yyyy hh24:mi:ss') ,'c3'  ,'Вручено'  from dual union all
select 9  ,to_date('12.12.2018 01:00:00','dd.mm.yyyy hh24:mi:ss') ,'d4'  ,'Прием'  from dual union all
select 10  ,to_date('14.12.2018 02:00:00','dd.mm.yyyy hh24:mi:ss') ,'d4'  ,'Вручено'  from dual union all
select 11  ,to_date('12.12.2018 07:00:00','dd.mm.yyyy hh24:mi:ss') ,'e5'  ,'Прием'  from dual union all
select 12  ,to_date('12.12.2018 09:00:00','dd.mm.yyyy hh24:mi:ss') ,'e5'  ,'Сортировка'  from dual union all
select 11  ,to_date('12.12.2018 10:00:00','dd.mm.yyyy hh24:mi:ss') ,'e5'  ,'Прием'  from dual union all
select 13  ,to_date('14.12.2018 11:00:00','dd.mm.yyyy hh24:mi:ss') ,'e5'  ,'Вручено'  from dual union all
select 14  ,to_date('16.12.2018 01:00:00','dd.mm.yyyy hh24:mi:ss') ,'f6'  ,'Прием'  from dual union all
select 15  ,to_date('19.12.2018 02:00:00','dd.mm.yyyy hh24:mi:ss') ,'f6'  ,'Вручено'  from dual 
)
, r_ts as (
select '10.12.18' ,2 as posylki,'50%' as day0,'50%' as day1,'100%' as day2,'100%' as day3,'100%' as day4,'100%' as day5 from dual union all
select '12.12.18' ,3 as posylki,'0%' as day0,'33%' as day1,'67%' as day2,'100%' as day3,'100%' as day4,'100%' as day5 from dual union all
select '16.12.18' ,1 as posylki,'0%' as day0,'0%' as day1,'0%' as day2,'100%' as day3,'100%' as day4,'100%' as day5 from dual
)
, t as (
select
    t1.nn
    ,min(trunc(t1.dt,'DD')) as dt1
    ,max(trunc(t2.dt,'DD')) as dt2   
from u_ts t1,u_ts t2
where t1.nn = t2.nn
and t1.oc='Прием'
and t2.oc='Вручено'
group by t1.nn
)
, tt as (select 
    dt1
    ,dt2
    ,dt2-dt1 as dd
    , count(dt1) over (PARTITION BY DT1) as cnt from t
)
--select * from tt order by dt1
select 
dt1
,cnt
,cnt  - sum(sign(dd )) as day1
,cnt  - sum(sign(dd - 1)) as day2
,cnt  - sum(sign(dd - 2)) as day3 
,cnt  - sum(sign(dd - 3)) as day4 
,cnt  - sum(sign(dd - 4)) as day5 
from tt 
group by dt1,cnt
order by dt1
;

DT1              CNT       DAY1       DAY2       DAY3       DAY4       DAY5
--------- ---------- ---------- ---------- ---------- ---------- ----------
10-DEC-18          2          1          3          4          4          4
12-DEC-18          3          0          1          4          6          6
16-DEC-18          1          0          0          0          1          2



Как то так, но дальше бошка не работает (болею), что там с чем надо сложить
Идея понятна, если написать через case точно взлетит
...
Рейтинг: 0 / 0
ORACLE PL/SQL,ЗАПРОС
    #39747089
sanzhar333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin,

Vadim Lejnin,

спасибо вам большое за отклик, поле DT1 и CNT вы сделали правильно.
но поля DAY1,DAY2,DAY3,DAY4,DAY5 считаются таким образом:

пример1
DT1='10.12.2018'
CNT=2
day1=полеCNT-(суммаВрученных посылок в тотже день(10.12.2018))
day2=полеCNT-(суммаВрученных посылок день + 1(11.12.2018))
day3=полеCNT-(суммаВрученных посылок день + 2(12.12.2018))
после того как все посылки вручены за 10.12.2018 он берет просто поле CNT
day4=полеCNT
day5=полеCNT

пример2
DT1='12.12.2018'
CNT=3
day1=полеCNT-(суммаВрученных посылок в тотже день(12.12.2018))
day2=полеCNT-(суммаВрученных посылок день + 1(13.12.2018))
day3=полеCNT-(суммаВрученных посылок день + 2(14.12.2018))
после того как все посылки вручены за 15.12.2018 он берет просто поле CNT
day4=полеCNT
day5=полеCNT
...
Рейтинг: 0 / 0
ORACLE PL/SQL,ЗАПРОС
    #39747091
sanzhar333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sanzhar333,
ТО ЕСТЬ ВОТ ТАКИМ ОБРАЗОМ)))
пример1
DT1='10.12.2018'
CNT=2
day1=суммаВрученных посылок в тотже день(10.12.2018)
day2=суммаВрученных посылок день + 1(11.12.2018)
day3=суммаВрученных посылок день + 2(12.12.2018)
после того как все посылки вручены за 10.12.2018 он берет просто поле CNT
day4=полеCNT
day5=полеCNT

пример2
DT1='12.12.2018'
CNT=3
day1=суммаВрученных посылок в тотже день(12.12.2018)
day2=суммаВрученных посылок день + 1(13.12.2018)
day3=суммаВрученных посылок день + 2(14.12.2018)
после того как все посылки вручены за 15.12.2018 он берет просто поле CNT
day4=полеCNT
day5=полеCNT
...
Рейтинг: 0 / 0
ORACLE PL/SQL,ЗАПРОС
    #39747092
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanzhar333вы сделали правильно.
но поля DAY1,DAY2,DAY3,DAY4,DAY5 считаются таким образом:Скажи, куда ему прийти за твоей зарплатой?
...
Рейтинг: 0 / 0
ORACLE PL/SQL,ЗАПРОС
    #39747099
sanzhar333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,
я только учусь)
...
Рейтинг: 0 / 0
ORACLE PL/SQL,ЗАПРОС
    #39747127
sanzhar333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select 1 as id,to_date('10.12.2018 01:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'a1' as nomer_posylki,'Прием' as oper_code from dual union all
select 2 as id,to_date('10.12.2018 02:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'a1' as nomer_posylki,'Сортировка' as oper_code from dual union all
select 3 as id,to_date('10.12.2018 03:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'a1' as nomer_posylki,'Прием' as oper_code from dual union all
select 4 as id,to_date('10.12.2018 04:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'a1' as nomer_posylki,'Вручено' as oper_code from dual union all
select 5 as id,to_date('10.12.2018 01:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'b2' as nomer_posylki,'Прием' as oper_code from dual union all
select 6 as id,to_date('11.12.2018 02:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'b2' as nomer_posylki,'Вручено' as oper_code from dual union all
select 7 as id,to_date('12.12.2018 01:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'c3' as nomer_posylki,'Прием' as oper_code from dual union all
select 8 as id,to_date('13.12.2018 02:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'c3' as nomer_posylki,'Вручено' as oper_code from dual union all
select 9 as id,to_date('12.12.2018 01:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'d4' as nomer_posylki,'Прием' as oper_code from dual union all
select 10 as id,to_date('14.12.2018 02:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'d4' as nomer_posylki,'Вручено' as oper_code from dual union all
select 11 as id,to_date('12.12.2018 07:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'e5' as nomer_posylki,'Прием' as oper_code from dual union all
select 12 as id,to_date('12.12.2018 09:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'e5' as nomer_posylki,'Сортировка' as oper_code from dual union all
select 13 as id,to_date('12.12.2018 10:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'e5' as nomer_posylki,'Прием' as oper_code from dual union all
select 14 as id,to_date('14.12.2018 11:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'e5' as nomer_posylki,'Вручено' as oper_code from dual union all
select 15 as id,to_date('16.12.2018 01:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'f6' as nomer_posylki,'Прием' as oper_code from dual union all
select 16 as id,to_date('19.12.2018 02:00:00','dd.mm.yyyy hh24:mi:ss') as date_reg,'f6' as nomer_posylki,'Вручено' as oper_code from dual 



Вот таблица
...
Рейтинг: 0 / 0
ORACLE PL/SQL,ЗАПРОС
    #39747455
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select dt_income, count(nomer_posylki) total_income
     , count(case when days_offset = 0 then nomer_posylki end) d0
     , case when max(days_offset) < 1 then count(nomer_posylki) else count(case when days_offset = 1 then nomer_posylki end) end d1
     , case when max(days_offset) < 2 then count(nomer_posylki) else count(case when days_offset = 2 then nomer_posylki end) end d2
     , case when max(days_offset) < 3 then count(nomer_posylki) else count(case when days_offset = 3 then nomer_posylki end) end d3
     , case when max(days_offset) < 4 then count(nomer_posylki) else count(case when days_offset = 4 then nomer_posylki end) end d4
     , case when max(days_offset) < 5 then count(nomer_posylki) else count(case when days_offset = 5 then nomer_posylki end) end d5
  from (
          select nomer_posylki
               , min(case oper_code when 'Прием' then trunc(date_reg) end) dt_income
               , max(case oper_code when 'Вручено' then trunc(date_reg) end) 
               - min(case oper_code when 'Прием' then trunc(date_reg) end) days_offset
           from U_TS
          group by nomer_posylki
) group by dt_income
order by dt_income

...
Рейтинг: 0 / 0
ORACLE PL/SQL,ЗАПРОС
    #39747686
sanzhar333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,Спасибо вам большое
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORACLE PL/SQL,ЗАПРОС
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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