powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как выгрузить определенные данные за период, где они засветились минимум 1 секунду
14 сообщений из 14, страница 1 из 1
Как выгрузить определенные данные за период, где они засветились минимум 1 секунду
    #39940867
masir0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выгрузить все terminal_device_id, у которых тарифный план Псков - Тарифище 082018 (МАСС) (SCP) за февраль месяц был хотя бы 1 секунду !

фишка в том что бы учитывались id и тех кто активных, т.е. у кого date_to = null, не закрыты
допустим они могли подключиться в декабре и по сей день сидеть на этом плане , мне нужно и таких учитывать
А у меня получается только учитывать либо строго за февраль месяц , тех у кого как то меняется план или просто у кого он уже есть, но при этом еще только тех, кто закрыл этот тарифный план в феврале, а мне нужно еще активных учитывать
Либо опять же получается всех учитываю и тех кто подключился до февраля и тех кто после февраля с этим тарифом, но уже не активных все равно, тк они закрыли этот план и перешли на другой

вот код



select td.terminal_device_id, td.date_from, td.date_to, tp.tariff_plan_name, tp.tariff_plan_id
from cust.terminal_device td inner join rd.tariff_plan tp
on td.tariff_plan_id = tp.tariff_plan_id
inner join cust.terminal_device td2
on td.terminal_device_id=td2.terminal_device_id


where td2.date_to between to_date('01.02.2020 00:00:00', 'dd.mm.yyyy hh24:mi:ss') and to_date ('29.02.2020 23.59.59', 'dd.mm.yyyy hh24:mi:ss')
and td.date_to >= td2.date_from+1/86400
and tp.tariff_plan_name = 'Псков - Тарифище 082018 (МАСС) (SCP)'


and exists (select td3.date_from from cust.terminal_device td3
where td.terminal_device_id=td3.terminal_device_id
and td3.date_to is null
);
...
Рейтинг: 0 / 0
Как выгрузить определенные данные за период, где они засветились минимум 1 секунду
    #39940919
masir0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
masir0n, подсказали что с помощью greatest и least, пока что не совсем понимаю как
...
Рейтинг: 0 / 0
Как выгрузить определенные данные за период, где они засветились минимум 1 секунду
    #39940939
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
masir0n,

Вам надо выбирать строки у которых пересекаются два интервала/диапазона

февраль to_date('01.02.2020 00:00:00', 'dd.mm.yyyy hh24:mi:ss') and to_date ('29.02.2020 23.59.59')
и date_from and nvl(date_to,date '9999-12-30')

зы
если не получится, нарисую

.....
stax
...
Рейтинг: 0 / 0
Как выгрузить определенные данные за период, где они засветились минимум 1 секунду
    #39940948
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
masir0n
masir0n, подсказали что с помощью greatest и least , пока что не совсем понимаю как


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

  1  with tarif (id,from_date,to_date) as (
  2  select 1,date '2020-01-01',date '2020-01-31' from dual union all
  3  select 2,date '2020-01-02',date '2020-02-02' from dual union all
  4  select 3,date '2020-01-03',null from dual union all
  5  select 4,date '2020-02-01',date '2020-02-29' from dual union all
  6  select 5,date '2020-02-02',date '2020-03-29' from dual union all
  7  select 6,date '2020-02-03',null from dual union all
  8  select 7,date '2020-03-01',date '2020-05-29' from dual union all
  9  select 8,date '2020-03-03',null from dual)
 10  select * from tarif
 11  where greatest(from_date,date '2020-02-02')<=
 12*       least(nvl(to_date,date'3333-12-31'), to_date ('29.02.2020 23.59.59', 'dd.mm.yyyy hh24:mi:ss'))
SQL> /

        ID FROM_DATE  TO_DATE
---------- ---------- ----------
         2 02.01.2020 02.02.2020
         3 03.01.2020
         4 01.02.2020 29.02.2020
         5 02.02.2020 29.03.2020
         6 03.02.2020



ps
хотя б я пользовал <= and ... >=


.....
stax
...
Рейтинг: 0 / 0
Как выгрузить определенные данные за период, где они засветились минимум 1 секунду
    #39940958
masir0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
Покажите пожалуйста , как реализовать
Не совсем ясно, зачем заменять ноль ( если он есть ) на '9999-12-30, что бы могли его захватить при запросе ?
Попробовал, вроде как ничего не изменилось
...
Рейтинг: 0 / 0
Как выгрузить определенные данные за период, где они засветились минимум 1 секунду
    #39940960
masir0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

Сейчас попробую
...
Рейтинг: 0 / 0
Как выгрузить определенные данные за период, где они засветились минимум 1 секунду
    #39940962
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL> with tarif (id,from_date,to_date) as (
  2      select 1,date '2020-01-01',date '2020-01-31' from dual union all
  3      select 2,date '2020-01-02',date '2020-02-02' from dual union all
  4      select 3,date '2020-01-03',null from dual union all
  5      select 4,date '2020-02-01',date '2020-02-29' from dual union all
  6      select 5,date '2020-02-02',date '2020-03-29' from dual union all
  7      select 6,date '2020-02-03',null from dual union all
  8      select 7,date '2020-03-01',date '2020-05-29' from dual union all
  9      select 8,date '2020-03-03',null from dual)
 10    select * from tarif
 11    Where
 12     	Date'2020-02-01' Between Trunc(from_date, 'Mon') And Trunc(Nvl(to_date, Sysdate), 'Mon');

        ID FROM_DATE   TO_DATE
---------- ----------- -----------
         2 1/2/2020    2/2/2020
         3 1/3/2020    
         4 2/1/2020    2/29/2020
         5 2/2/2020    3/29/2020
         6 2/3/2020
...
Рейтинг: 0 / 0
Как выгрузить определенные данные за период, где они засветились минимум 1 секунду
    #39940973
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
masir0n

Stax,
Покажите пожалуйста , как реализовать
Не совсем ясно, зачем заменять ноль ( если он есть ) на '9999-12-30, что бы могли его захватить при запросе ?
Попробовал, вроде как ничего не изменилось


авторт.е. у кого date_to = null , не закрыты


можно и без nvl, но тогда ... OR is null ...

....
stax
...
Рейтинг: 0 / 0
Как выгрузить определенные данные за период, где они засветились минимум 1 секунду
    #39940976
masir0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

написал вот такой код , вроде все получилось, большое спасибо

select td.terminal_device_id, td.date_from, td.date_to, tp.tariff_plan_name, tp.tariff_plan_id
from cust.terminal_device td inner join rd.tariff_plan tp
on td.tariff_plan_id = tp.tariff_plan_id

* where greatest(td.date_from ,date '2020-02-02')<= least(nvl( td.date_to, date'3333-12-31'), to_date ('29.02.2020 23.59.59', 'dd.mm.yyyy hh24:mi:ss'))

and tp.tariff_plan_name = 'Псков - Тарифище 082018 (МАСС) (SCP)'

Но, не могли бы пояснить как именно это все работает вот в этой строке *, хочу понять как запрос выполняется
...
Рейтинг: 0 / 0
Как выгрузить определенные данные за период, где они засветились минимум 1 секунду
    #39940986
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
masir0n
как именно это все работает вот в этой строке


я ж писал
авторВам надо выбирать строки у которых пересекаются два интервала/диапазона

одно из уcловий пересечения интервалов (по разному можно)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
           01/02         29/02
           <==================>
    From   |       To         |
    <------+------->          |
      From |                  |      To
      <----+------------------+------>
           |       From       |                  To
           |       <----------+------------------- 
           |                  |
           |  From       To   |
From  To   |  <---------->    |
<----->    |                  |  From      To     
           |                  |  <--------->



не я советовал "подсказали что с помощью greatest и least"
просто привел пример c greatest и least

.....
stax
...
Рейтинг: 0 / 0
Как выгрузить определенные данные за период, где они засветились минимум 1 секунду
    #39940998
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
           START         FINISH
           <==================>
    From   |       To         |
    <------+------->          |
      From |                  |      To
      <----+------------------+------>
           |       From       |                  To
           |       <----------+------------------- 
           |                  |
           |  From       To   |
From  To   |  <---------->    |
<----->    |                  |  From      To     
           |                  |  <--------->


Попадание в интервал от START до FINISH очень хорошо описывается изящным условием
Код: sql
1.
2.
WHERE To > START  
  AND From < FINISH


( > или >= и < или <= отрегулируйте по вашей задаче)
...
Рейтинг: 0 / 0
Как выгрузить определенные данные за период, где они засветились минимум 1 секунду
    #39941006
masir0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
Спасибо
...
Рейтинг: 0 / 0
Как выгрузить определенные данные за период, где они засветились минимум 1 секунду
    #39941008
masir0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL*Plus,

Вот как, спасибо
...
Рейтинг: 0 / 0
Как выгрузить определенные данные за период, где они засветились минимум 1 секунду
    #39941010
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus,

авторхотя б я пользовал <= and ... >=


отвечал на "посоветовали greatest ..."

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


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