powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывод дать с разностью 1-5 дней с помощью connect by и wiht
7 сообщений из 7, страница 1 из 1
Вывод дать с разностью 1-5 дней с помощью connect by и wiht
    #39936186
SDR95
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Ситуация следующая: нужно вывести 100 дат от текущей даты, разница должна быть 1-5 дней.
Сперва я просто вывел все даты подряд:
Код: plsql
1.
2.
3.
SELECT TO_DATE( '11.03.2020', 'dd.mm.yyyy') + LEVEL -1 
FROM DUAL
CONNECT BY LEVEL <= 100


Вместо даты можно просто SYSDATE использовать, но не суть.
Далее я например вывожу чтобы выводил например с разницей в 5 дней:
Код: plsql
1.
2.
3.
SELECT TO_DATE( '11.03.2020' , 'dd.mm.yyyy') + LEVEL*5 -1 
FROM DUAL
CONNECT BY LEVEL <= 100


Всё выводит, всё нормально
Теперь я хочу рандомное число от 1-5, использую ROUND(DBMS_RANDOM.VALUE(1,6)).

НО когда я вставляю его в код, он вообще ахинею какую то выводит. Может например вывести точно такое же число как и предыдущее, может ВООБЩЕ отнять фиг пойми как.
Код: plsql
1.
2.
3.
SELECT TO_DATE( '11.03.2020' , 'dd.mm.yyyy') + LEVEL -1 +ROUND(DBMS_RANDOM.VALUE(1,6))
FROM DUAL
CONNECT BY LEVEL <= 100


Подскажите пожалуйста что я не так делаю, может я не ту функцию или не так пиши. Ну и по возможности подскажите как сделать этот запрос с WITH, ну тоесть рекурсивный запрос, если ниче не путаю. Спасибо заранее за помощь.
...
Рейтинг: 0 / 0
Вывод дать с разностью 1-5 дней с помощью connect by и wiht
    #39936189
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SDR95
Подскажите пожалуйста что я не так делаю, может я не ту функцию
Используешь недетерминированную функцию, которая имеет право вызываться как минимум единожды на строку результата.
...
Рейтинг: 0 / 0
Вывод дать с разностью 1-5 дней с помощью connect by и wiht
    #39936195
SDR95
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,
поподробнее можно пожалуйста?
Ты про dbms_random?
Я новичок в Oracle, не всё точно понимаю.
...
Рейтинг: 0 / 0
Вывод дать с разностью 1-5 дней с помощью connect by и wiht
    #39936196
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SDR95
Я новичок в Oracle, не всё точно понимаю.
Для новичка ты рановато полез в дебри.
...
Рейтинг: 0 / 0
Вывод дать с разностью 1-5 дней с помощью connect by и wiht
    #39936199
SDR95
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,
это на стажировки дали задание такое.
До этого просто иерархию сказали сделать с connect и без connect by.
...
Рейтинг: 0 / 0
Вывод дать с разностью 1-5 дней с помощью connect by и wiht
    #39936238
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SDR95,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  1  SELECT TO_DATE( '11.03.2020' , 'dd.mm.yyyy') + (LEVEL -1)*5 +/*trunc*/(DBMS_RANDOM.VALUE(1,sign(level)+5))
  2  FROM DUAL
  3* CONNECT BY LEVEL <= 10
SQL> /

TO_DATE('11.03.2020
-------------------
14.03.2020 03:07:58
17.03.2020 17:56:39
25.03.2020 23:13:48
29.03.2020 21:49:44
04.04.2020 08:02:30
07.04.2020 03:56:54
15.04.2020 08:40:35
16.04.2020 18:00:42
25.04.2020 19:40:10
28.04.2020 18:21:09

10 rows selected.



.....
stax
...
Рейтинг: 0 / 0
Вывод дать с разностью 1-5 дней с помощью connect by и wiht
    #39936241
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SDR95

Ну и по возможности подскажите как сделать этот запрос с WITH, ну тоесть рекурсивный запрос

Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  with t(d,l) as (
  2  select  TO_DATE( '11.03.2020' , 'dd.mm.yyyy')  d,1 l from dual
  3  union all
  4  SELECT TO_DATE( '11.03.2020' , 'dd.mm.yyyy') + (L -1)*5 +/*trunc*/(DBMS_RANDOM.VALUE(1,sign(l)+5)),l+1 l
  5  FROM t where l<11
  6  )
  7* select * from t
SQL> /

D                            L
------------------- ----------
11.03.2020 00:00:00          1
13.03.2020 07:37:17          2
17.03.2020 14:48:05          3
23.03.2020 10:02:05          4
29.03.2020 09:25:21          5
05.04.2020 13:11:30          6
10.04.2020 00:59:10          7
15.04.2020 18:22:45          8
19.04.2020 23:34:52          9
24.04.2020 03:12:00         10
30.04.2020 17:59:56         11

11 rows selected.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывод дать с разностью 1-5 дней с помощью connect by и wiht
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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