powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Рандомное количество дат
20 сообщений из 20, страница 1 из 1
Рандомное количество дат
    #39701396
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 и так до конца месяца
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701412
mibin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maska321,
Так?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
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
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701462
Maska321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mibin,

ORA-00905: отсутствует ключевое слово
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701463
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maska321ORA-00905: отсутствует ключевое словоА ты в посовременней версии пробуй.
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701467
Maska321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,
к сожалению нужно на такой , какая есть
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701471
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maska321к сожалению нужно на такой , какая естьДурёха, ты бы её хотя бы озвучила, что ли.
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701475
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maska321,

какая версія?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  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
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701484
Maska321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, Спасибо!
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701485
Maska321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic, 11я
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701524
Maska321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
Посоветуйте литературу насчет xmltable
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701543
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maska321Stax,
Посоветуйте литературу насчет 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
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701556
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maska321Stax,
Посоветуйте литературу насчет xmltable

вам надо в 21672019 заменіть lateral, не обязательно XMLtable
можно напр
Код: 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.
  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
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701561
Maska321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maska321select (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 и так до конца месяца

а как сделать с помощью цикла?
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701565
Maska321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,Спасибо!
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701575
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maska321а как сделать с помощью цикла?

чесно говоря я про цікл не понял
Код: 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.
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
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701579
Maska321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
отлично, спасибо
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701605
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxчесно говоря я про цікл не понял

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


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
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;
/
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701623
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
merch,

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

....
stax
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39701959
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maska321Stax,
Посоветуйте литературу насчет xmltable
Настолько явной демонстрации вреда от советов Стаса я не припомню
...
Рейтинг: 0 / 0
Рандомное количество дат
    #39702024
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMLerMaska321Stax,
Посоветуйте литературу насчет xmltable
Настолько явной демонстрации вреда от советов Стаса я не припомню
так я ж не скриваю
автортут я не советчик, плохо знаю доку

ps
без табле
Код: 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.
  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
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Рандомное количество дат
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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