Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Рандомное количество дат  [new]
Maska321
Member

Откуда:
Сообщений: 52
select (TRUNC(ADD_MONTHS(SYSDATE,-1),'MM')+rownum-1) from dual
connect by rownum <= LAST_DAY(TRUNC(ADD_MONTHS(SYSDATE,-1),'MM'))-TRUNC(ADD_MONTHS(SYSDATE,-1),'MM')+1


Есть даты за предыдущий месяц, помогите вывести рандомное количество каждой даты (от 1 до 3) ,
с помощью функции pl\sql
например:
01.08.2018
01.08.2018
01.08.2018
02.08.2018
02.08.2018
03.08.2018 и так до конца месяца
12 сен 18, 12:36    [21671985]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
mibin
Member

Откуда:
Сообщений: 32
Maska321,
Так?

with w_data as
(
  select trunc(add_months(sysdate, -1), 'MM') + rownum - 1 as dt,
         trunc(dbms_random.value(1,3)) as rnd
        from dual
  connect by rownum <= last_day(trunc(add_months(sysdate, -1), 'MM'))
                       - trunc(add_months(sysdate, -1), 'MM') + 1
)
select d.*
  from w_data d
       inner join lateral(
                    select 1
                      from dual
                      connect by level <= d.rnd
                  )
               on 1=1
 order by d.dt
12 сен 18, 12:58    [21672019]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
Maska321
Member

Откуда:
Сообщений: 52
mibin,

ORA-00905: отсутствует ключевое слово
12 сен 18, 14:04    [21672150]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28395
Maska321
ORA-00905: отсутствует ключевое слово
А ты в посовременней версии пробуй.
12 сен 18, 14:05    [21672152]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
Maska321
Member

Откуда:
Сообщений: 52
Elic,
к сожалению нужно на такой , какая есть
12 сен 18, 14:10    [21672163]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28395
Maska321
к сожалению нужно на такой , какая есть
Дурёха, ты бы её хотя бы озвучила, что ли.
12 сен 18, 14:15    [21672176]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1368
Maska321,

какая версія?
  1  with w_data as
  2  (
  3    select trunc(add_months(sysdate, -1), 'MM') + rownum - 1 as dt,
  4           trunc(dbms_random.value(1,4)) as rnd
  5          from dual
  6    connect by rownum <= last_day(trunc(add_months(sysdate, -1), 'MM'))
  7                         - trunc(add_months(sysdate, -1), 'MM') + 1
  8  )
  9  select * from w_data,
 10* xmltable('1 to xs:integer($n)' passing rnd as "n" columns rn number path '.')
SQL> /

DT              RND         RN
-------- ---------- ----------
01.08.18          1          1
02.08.18          1          1
03.08.18          3          1
03.08.18          3          2
03.08.18          3          3
04.08.18          1          1
05.08.18          1          1
...


.....
stax
12 сен 18, 14:19    [21672190]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
Maska321
Member

Откуда:
Сообщений: 52
Stax, Спасибо!
12 сен 18, 14:26    [21672207]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
Maska321
Member

Откуда:
Сообщений: 52
Elic, 11я
12 сен 18, 14:27    [21672210]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
Maska321
Member

Откуда:
Сообщений: 52
Stax,
Посоветуйте литературу насчет xmltable
12 сен 18, 14:54    [21672271]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1368
Maska321
Stax,
Посоветуйте литературу насчет xmltable

тут я не советчик, плохо знаю доку
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions228.htm

имхо, Вам бы пригодилось и по XQuery
https://docs.oracle.com/cd/B19306_01/appdev.102/b14259/xdb_xquery.htm#ADXDB1700

......
stax
12 сен 18, 15:19    [21672304]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1368
Maska321
Stax,
Посоветуйте литературу насчет xmltable


вам надо в 21672019 заменіть lateral, не обязательно XMLtable
можно напр
  1  with w_data as
  2  (
  3    select trunc(add_months(sysdate, -1), 'MM') + rownum - 1 as dt,
  4           trunc(dbms_random.value(1,4)) as rnd
  5          from dual
  6    connect by rownum <= last_day(trunc(add_months(sysdate, -1), 'MM'))
  7                         - trunc(add_months(sysdate, -1), 'MM') + 1
  8  )
  9  select * from w_data,
 10  table(
 11     cast(
 12        multiset(
 13              select level
 14              from dual
 15              connect by level <= rnd)
 16*     as sys.odcinumberlist)) tt
SQL> /

DT              RND COLUMN_VALUE
-------- ---------- ------------
01.08.18          3            1
01.08.18          3            2
01.08.18          3            3
02.08.18          1            1
03.08.18          2            1
03.08.18          2            2
04.08.18          1            1
05.08.18          2            1
05.08.18          2            2
06.08.18          1            1
07.08.18          3            1
07.08.18          3            2
07.08.18          3            3
08.08.18          1            1
09.08.18          1            1
....



.....
stax
12 сен 18, 15:31    [21672327]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
Maska321
Member

Откуда:
Сообщений: 52
Maska321
select (TRUNC(ADD_MONTHS(SYSDATE,-1),'MM')+rownum-1) from dual
connect by rownum <= LAST_DAY(TRUNC(ADD_MONTHS(SYSDATE,-1),'MM'))-TRUNC(ADD_MONTHS(SYSDATE,-1),'MM')+1


Есть даты за предыдущий месяц, помогите вывести рандомное количество каждой даты (от 1 до 3) ,
с помощью функции pl\sql
например:
01.08.2018
01.08.2018
01.08.2018
02.08.2018
02.08.2018
03.08.2018 и так до конца месяца


а как сделать с помощью цикла?
12 сен 18, 15:36    [21672340]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
Maska321
Member

Откуда:
Сообщений: 52
Stax,Спасибо!
12 сен 18, 15:44    [21672351]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1368
Maska321
а как сделать с помощью цикла?


чесно говоря я про цікл не понял
SQL> ed
Wrote file afiedt.buf

  1  declare
  2   procedure random_date(p_dat date) is
  3   begin
  4     for i in 1..trunc(dbms_random.value(1,4)) loop
  5       dbms_output.put_line(p_dat||' '||i);
  6     end loop;
  7   end;
  8  begin
  9  for r in (
 10    select trunc(add_months(sysdate, -1), 'MM') + rownum - 1 as dt
 11    from dual
 12    connect by rownum <= last_day(trunc(add_months(sysdate, -1), 'MM'))
 13                         - trunc(add_months(sysdate, -1), 'MM') + 1
 14    ) loop
 15   random_date(r.dt);
 16  end loop;
 17* end;
SQL> /
01.08.18 1
01.08.18 2
02.08.18 1
02.08.18 2
03.08.18 1
03.08.18 2
03.08.18 3
04.08.18 1
05.08.18 1
05.08.18 2
...


.....
stax
12 сен 18, 15:53    [21672367]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
Maska321
Member

Откуда:
Сообщений: 52
Stax,
отлично, спасибо
12 сен 18, 15:54    [21672374]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
merch
Member

Откуда:
Сообщений: 119
Stax
чесно говоря я про цікл не понял


Быть может имелось ввиду уйти от sql при получении списка дат?


set serveroutput on
declare
  l_date date := to_date('01.08.2018', 'dd.mm.yyyy');
  
  procedure random_date(p_date date) is
  begin
    for i in 1..trunc(dbms_random.value(1,4)) loop
      dbms_output.put_line(p_date ||' '|| i);
    end loop;
  end;   
begin
  loop
    random_date(l_date);
  exit when l_date = last_day(l_date);
  l_date := l_date + 1;
  end loop;
end;
/
12 сен 18, 16:16    [21672424]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1368
merch,

исходил из того что в изначальном посте был селест

....
stax
12 сен 18, 16:28    [21672454]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
XMLer
Member

Откуда:
Сообщений: 248
Maska321
Stax,
Посоветуйте литературу насчет xmltable

Настолько явной демонстрации вреда от советов Стаса я не припомню
13 сен 18, 11:35    [21673275]     Ответить | Цитировать Сообщить модератору
 Re: Рандомное количество дат  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1368
XMLer
Maska321
Stax,
Посоветуйте литературу насчет xmltable

Настолько явной демонстрации вреда от советов Стаса я не припомню

так я ж не скриваю
автор
тут я не советчик, плохо знаю доку


ps
без табле
  1  with w_data as
  2    (
  3      select trunc(add_months(sysdate, -1), 'MM') + rownum - 1 as dt,
  4             trunc(dbms_random.value(1,4)) as rnd
  5            from dual
  6      connect by rownum <= last_day(trunc(add_months(sysdate, -1), 'MM'))
  7                           - trunc(add_months(sysdate, -1), 'MM') + 1
  8    )
  9  ,pivot as (
 10    select 1 id from dual union all
 11    select 2 from dual union all
 12    select 3 from dual )
 13  select * from w_data,pivot where id<=rnd
 14* order by 1,3
SQL> /

DT              RND         ID
-------- ---------- ----------
01.08.18          1          1
02.08.18          3          1
02.08.18          3          2
02.08.18          3          3
03.08.18          2          1
03.08.18          2          2
...



....
stax
13 сен 18, 12:36    [21673382]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить