powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разделить записи на 2 части.
15 сообщений из 15, страница 1 из 1
Разделить записи на 2 части.
    #39797389
proxy_911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день коллеги,
Есть таблица t1 которые содержит одно записи.
Код: plsql
1.
2.
ID         start_stime                       end_time 
1          05.03.2019 10:00:00        04.05.2019 10:00:00



Соответственно между start_stime и end_time ровно 60 дней.
Не подскажите как мне вывести из одной записи 2 запись с SELECT -ом, т.е интервал разделить по 30-и дней.
Результат должен выглядит вот так:

Код: plsql
1.
2.
3.
ID         start_stime                       end_time 
1          05.03.2019 10:00:00        04.04.2019 10:00:00
1          04.04.2019 10:00:00        04.05.2019 10:00:00



Буду благодарен за каждый ответь, заранее спасибо.
...
Рейтинг: 0 / 0
Разделить записи на 2 части.
    #39797425
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> WITH DATA AS (
  2                SELECT  TO_DATE('05.03.2019 10:00:00','DD.MM.YYYY HH24:MI:SS') START_TIME,
  3                        TO_DATE('04.05.2019 10:00:00','DD.MM.YYYY HH24:MI:SS') END_TIME
  4                  FROM  DUAL
  5               )
  6  SELECT  START_TIME + 30 * (L - 1) START_TIME,
  7          LEAST(END_TIME,END_TIME + 30 * L) END_TIME
  8    FROM  DATA,
  9          LATERAL(
 10                  SELECT  LEVEL L
 11                    FROM  DUAL
 12                    CONNECT BY LEVEL <= CEIL((END_TIME - START_TIME) / 30)
 13                 )
 14  /

START_TIME          END_TIME
------------------- -------------------
05.03.2019 10:00:00 04.05.2019 10:00:00
04.04.2019 10:00:00 04.05.2019 10:00:00

SQL> 



SY.
...
Рейтинг: 0 / 0
Разделить записи на 2 части.
    #39797429
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OOPS:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
WITH DATA AS (
              SELECT  TO_DATE('05.03.2019 10:00:00','DD.MM.YYYY HH24:MI:SS') START_TIME,
                      TO_DATE('04.05.2019 10:00:00','DD.MM.YYYY HH24:MI:SS') END_TIME
                FROM  DUAL
             )
SELECT  START_TIME + 30 * (L - 1) START_TIME,
        LEAST(END_TIME,START_TIME + 30 * L) END_TIME
  FROM  DATA,
        LATERAL(
                SELECT  LEVEL L
                  FROM  DUAL
                  CONNECT BY LEVEL <= CEIL((END_TIME - START_TIME) / 30)
               )
/

START_TIME          END_TIME
------------------- -------------------
05.03.2019 10:00:00 04.04.2019 10:00:00
04.04.2019 10:00:00 04.05.2019 10:00:00

SQL> 



SY.
...
Рейтинг: 0 / 0
Разделить записи на 2 части.
    #39797432
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код я дал разбивает по 30 дней независимо сколько дней между START_TIME и END_TIME. Если 60 всегда, то можно упростить:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
WITH DATA AS (
              SELECT  TO_DATE('05.03.2019 10:00:00','DD.MM.YYYY HH24:MI:SS') START_TIME,
                      TO_DATE('04.05.2019 10:00:00','DD.MM.YYYY HH24:MI:SS') END_TIME
                FROM  DUAL
             ),
   DOUBLE AS (
              SELECT  LEVEL L
                FROM  DUAL
                CONNECT BY LEVEL <= 2
             )
SELECT  START_TIME + 30 * (L - 1) START_TIME,
        LEAST(END_TIME,START_TIME + 30 * L) END_TIME
  FROM  DATA,
        DOUBLE
/

START_TIME          END_TIME
------------------- -------------------
05.03.2019 10:00:00 04.04.2019 10:00:00
04.04.2019 10:00:00 04.05.2019 10:00:00

SQL> 



SY.
...
Рейтинг: 0 / 0
Разделить записи на 2 части.
    #39797627
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYЕсли 60 всегда, то можно упростить

Код: plsql
1.
2.
3.
4.
select id, start_stime, start_stime+30 as end_time from t
union all
select id, start_stime+31, end_time from t
order by 1, 2
...
Рейтинг: 0 / 0
Разделить записи на 2 части.
    #39797636
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FogelSYЕсли 60 всегда, то можно упростить

Код: plsql
1.
2.
3.
4.
select id, start_stime, start_stime+30 as end_time from t
union all
select id, start_stime+31, end_time from t
order by 1, 2



То есть ты считаешь два TABLE ACCESS FULL таблицы DATA лучше чем один и DOUBLE в моем решении тяжелее TABLE ACCESS FULL таблицы DATA?

SY.
...
Рейтинг: 0 / 0
Разделить записи на 2 части.
    #39797791
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYТо есть ты считаешьFogel - это придурковатый тролль. Модератор обязан в этом ориентироваться.
...
Рейтинг: 0 / 0
Разделить записи на 2 части.
    #39797925
proxy_911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное Спасибо коллеги,
Получилось со второго запроса, Между Start_time и end_time не всегда 60 дней, может быть и 90,120 и т.д.
Благодарю за помощь SY.
...
Рейтинг: 0 / 0
Разделить записи на 2 части.
    #39797985
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYFogelпропущено...


Код: plsql
1.
2.
3.
4.
select id, start_stime, start_stime+30 as end_time from t
union all
select id, start_stime+31, end_time from t
order by 1, 2



То есть ты считаешь два TABLE ACCESS FULL таблицы DATA лучше чем один и DOUBLE в моем решении тяжелее TABLE ACCESS FULL таблицы DATA?

SY.

імхо
Запросы решают разные задачи

если делить токо на два интервала ("из одной записи 2 запись"),
то вместо CONNECT BY можно использаовать более легкую конструкцию

.....
stax
...
Рейтинг: 0 / 0
Разделить записи на 2 части.
    #39798071
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
если делить токо на два интервала ("из одной записи 2 запись"),
то вместо CONNECT BY можно использаовать более легкую конструкцию

.....
stax

Может покажешь?

SY.
...
Рейтинг: 0 / 0
Разделить записи на 2 части.
    #39798255
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Может покажешь?

SY.
а шо там показывать

select 1 L from dual union all select 2 from dual
или
select rownum l from my_table where rownum<=2

....
stax
...
Рейтинг: 0 / 0
Разделить записи на 2 части.
    #39799047
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYFogelпропущено...

Код: plsql
1.
2.
3.
4.
select id, start_stime, start_stime+30 as end_time from t
union all
select id, start_stime+31, end_time from t
order by 1, 2



То есть ты считаешь два TABLE ACCESS FULL таблицы DATA лучше чем один и DOUBLE в моем решении тяжелее TABLE ACCESS FULL таблицы DATA?

SY.

Стас уже всё сказал.
Если там всего 30 тыс записей (к примеру), и, как было первоначально озвучено, 60 дней, не нужно множить сущности без необходимости.
Но автор уже сказал, что не 60 дней и поблагодарил. Поэтому, чего уж.
...
Рейтинг: 0 / 0
Разделить записи на 2 части.
    #39799049
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicSYТо есть ты считаешьFogel - это придурковатый тролль. Модератор обязан в этом ориентироваться.

Модераторы просто обязаны ориентироваться, что Элик только что заоффтопил и меня оскорбил, чем нарушил правила форума )))

Сколько желчи в непризнанных гениях набирается, ужас просто.
...
Рейтинг: 0 / 0
Разделить записи на 2 части.
    #39799132
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fogelменя оскорбилОскорбить можно личность, но не тролле-проект. Паспорт продемонстрируешь?
FogelСколько желчи в непризнанных гениях набирается, ужас просто.Ты, недалёкий, многих вещей самовлюблённо не видишь.
...
Рейтинг: 0 / 0
Разделить записи на 2 части.
    #39799206
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FogelСтас уже всё сказал.
Если там всего 30 тыс записей (к примеру), и, как было первоначально озвучено, 60 дней, не нужно множить сущности без необходимости.
Но автор уже сказал, что не 60 дней и поблагодарил. Поэтому, чего уж.

А поговорить

імхо
я скорее на строне SY, два скана возможно хуже чем картезиан с двумя строками

и раз уж начали ловить блог, то предложил заменить соннест бау на более (как мне кажется) конструкцию
мож еще луче на что-то без обращения к табличке, аля sys.odcinumberlist, или какую-то легкую v$

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


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