Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Составление запроса с группирговкой по 15 минут / 20 сообщений из 20, страница 1 из 1
31.05.2017, 06:00
    #39462778
xaly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
Есть таблица с минутными данными температуры . Необходимо сгруппировать данные по 15 минут и добавить колонку с температурой, которая растет прямопропорционально 1час - 100 градусов т.е 15 мин -25 градусов
По полчаса без проблем собрала , а по пятнадцать... туплю не получается.

Мой запрос такой:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 SELECT  to_char(trunc(t.D_FINIS,'hh')+(round(t.D_FINIS,'hh')-trunc(t.D_FINIS,'hh'))/2,'hh:mi') as dtime,
      avg(decode(t.ID_PARAM,395,T.VAL,null)) t1,
      avg(decode(t.ID_PARAM,400,T.VAL,null)) t2,
      avg(decode(t.ID_PARAM,403,T.VAL,null)) t3,
      avg(decode(t.ID_PARAM,406,T.VAL,null)) t4
   
    FROM DAM.VALUES_TBL DAM
    WHERE T.FL_VALID=1
          and t.D_FINIS between  to_date(:0, 'dd/mm/yyyy hh24:mi:ss')  and  to_date(:1, 'dd/mm/yyyy hh24:mi:ss') 
  group by  trunc(t.D_FINIS,'hh')+(round(t.D_FINIS,'hh')-trunc(t.D_FINIS,'hh'))/2
  order by  1 
...
Рейтинг: 0 / 0
31.05.2017, 06:58
    #39462786
AnSi_Sr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
группировка по частному от деления количества минут (в днях) (момент измерения минус транк(момент измерения, час)) на четверть часа (т. е. 15 минут, привести к дням)
...
Рейтинг: 0 / 0
31.05.2017, 07:22
    #39462791
AnSi_Sr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
непонятно написал
вот так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
WITH s_moments
     AS (    SELECT TRUNC (SYSDATE, 'hh') + 1 / 24 / 60 * LEVEL AS dtime
               FROM DUAL
         CONNECT BY LEVEL < 120),
     s_moments2
     AS (SELECT s_moments.dtime,
                TRUNC (
                    (s_moments.dtime - TRUNC (s_moments.dtime, 'hh'))
                  * 60
                  * 24
                  / 15)
                  AS nhourpart
           FROM s_moments)
SELECT s_moments2.*,
       TRUNC (s_moments2.dtime, 'hh') + nhourpart * 1 / 24 / 60 * 15
         AS dgroupingtime
  FROM s_moments2
...
Рейтинг: 0 / 0
31.05.2017, 08:24
    #39462809
xaly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
AnSi_Srнепонятно написал
вот так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
WITH s_moments
     AS (    SELECT TRUNC (SYSDATE, 'hh') + 1 / 24 / 60 * LEVEL AS dtime
               FROM DUAL
         CONNECT BY LEVEL < 120),
     s_moments2
     AS (SELECT s_moments.dtime,
                TRUNC (
                    (s_moments.dtime - TRUNC (s_moments.dtime, 'hh'))
                  * 60
                  * 24
                  / 15)
                  AS nhourpart
           FROM s_moments)
SELECT s_moments2.*,
       TRUNC (s_moments2.dtime, 'hh') + nhourpart * 1 / 24 / 60 * 15
         AS dgroupingtime
  FROM s_moments2



Выполнила ваш запрос, но не ту же в результате групп по 15 мин.
задача вроде простая
есть таблица в ней две колонки дата время(по минутно) и значение. к ней сделать запрос так что было также 2 колонки только в первой колоники время сгруппировалось по 15 мин, а во второй значение было среднее за эти 15 минут.

Для примера должно получиться следущее:

12:00 20,44
12:15 21,4
12:30 22,1
12:45 23,8
13:00 22,56
...............

Только у меня там еще есть параметр, я по его значению разбросала на 4 колонки, но это не важно.
...
Рейтинг: 0 / 0
31.05.2017, 09:02
    #39462829
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
xaly,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
  1  with t as (
  2  select to_date('31.05.2017 09.00','dd.mm.yyyy hh24:mi') d,1 s from dual union all
  3  select to_date('31.05.2017 09.13','dd.mm.yyyy hh24:mi') d,10 from dual union all
  4  select to_date('31.05.2017 09.14','dd.mm.yyyy hh24:mi') d,2 from dual union all
  5  select to_date('31.05.2017 09.15','dd.mm.yyyy hh24:mi') d,20 from dual union all
  6  select to_date('31.05.2017 09.29.59','dd.mm.yyyy hh24:mi.ss') d,200 from dual
  7  )
  8  select to_char(trunc(d)+(trunc((d-trunc(d))*24*(60/15))/24/4),'dd.mm.yyyy hh24:mi:ss') d,sum(s) ss
  9  from t
 10  group by
 11* trunc(d)+(trunc((d-trunc(d))*24*(60/15))/24/4)
SQL> /

D                           SS
------------------- ----------
31.05.2017 09:00:00         13
31.05.2017 09:15:00        220



.....
stax
...
Рейтинг: 0 / 0
31.05.2017, 09:08
    #39462831
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
xalyа во второй значение было среднее за эти 15 минут.

ой, звыняйте

вместо sum avg

.....
stax
...
Рейтинг: 0 / 0
31.05.2017, 09:58
    #39462872
xaly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
stax..,

Я и сама сделала, но все равно спасибо.

Код: plsql
1.
 trunc(t.D_FINIS,'HH24')+((floor(to_number(to_char(t.D_FINIS,'MI'))/15)+1)*15)/(24*60)  as dtime
...
Рейтинг: 0 / 0
31.05.2017, 10:02
    #39462876
xaly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
stax..,

Хотя, ваше решение даже как-то покрасивее :)
...
Рейтинг: 0 / 0
31.05.2017, 10:18
    #39462902
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
xaly,

Ну и я допишу, коль пошла такая пьянка

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  with t as (
  select to_date('31.05.2017 09.00','dd.mm.yyyy hh24:mi') d,1 s from dual union all
  select to_date('31.05.2017 09.13','dd.mm.yyyy hh24:mi') d,10 from dual union all
  select to_date('31.05.2017 09.14','dd.mm.yyyy hh24:mi') d,2 from dual union all
  select to_date('31.05.2017 09.15','dd.mm.yyyy hh24:mi') d,20 from dual union all
  select to_date('31.05.2017 09.29.59','dd.mm.yyyy hh24:mi.ss') d,200 from dual
  )
  select to_char(d,'dd.mm.yyyy hh24')||' '|| FLOOR(to_char(d,'mi')/15) mi,
         avg(s) ss
  from t
  group by to_char(d,'dd.mm.yyyy hh24')||' '|| FLOOR(to_char(d,'mi')/15)
...
Рейтинг: 0 / 0
31.05.2017, 10:21
    #39462905
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
xalystax..,

Хотя, ваше решение даже как-то покрасивее :)
мне trunc(t.D_FINIS,'HH24') больше нравится


.....
stax
...
Рейтинг: 0 / 0
31.05.2017, 10:25
    #39462908
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
MaximaXXL,
Код: plsql
1.
2.
3.
4.
MI
----------------
31.05.2017 09 0
31.05.2017 09 1



.....
stax
...
Рейтинг: 0 / 0
31.05.2017, 10:29
    #39462911
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
stax..,

Ну да:
0 - от 0 до 14
1 - от 15 до 29
...

в условии не написано что это должно быть 00 или 15 а просто сгруппировать, вот я и подумал накой париться
а так даже нагляднее как бы подразумевая что это не конкретная дата а усреднение
...
Рейтинг: 0 / 0
31.05.2017, 10:33
    #39462914
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
MaximaXXLstax..,

Ну да:
0 - от 0 до 14
1 - от 15 до 29
...

в условии не написано что это должно быть 00 или 15 а просто сгруппировать, вот я и подумал накой париться
а так даже нагляднее как бы подразумевая что это не конкретная дата а усреднение
ясно
а то я дурак подумал что ето девять ч и одна мин

также итересно что такое среднее, ето avg, ілі (max-min)/2

.....
stax
...
Рейтинг: 0 / 0
31.05.2017, 10:38
    #39462918
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
stax..,

Чтоб не вводить людей в заблуждение:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  with t as (
  select to_date('31.05.2017 09.00','dd.mm.yyyy hh24:mi') d,1 s from dual union all
  select to_date('31.05.2017 09.13','dd.mm.yyyy hh24:mi') d,10 from dual union all
  select to_date('31.05.2017 09.14','dd.mm.yyyy hh24:mi') d,2 from dual union all
  select to_date('31.05.2017 09.15','dd.mm.yyyy hh24:mi') d,20 from dual union all
  select to_date('31.05.2017 09.29.59','dd.mm.yyyy hh24:mi.ss') d,200 from dual
  )
  select to_char(d,'dd.mm.yyyy hh24')||' '|| decode(FLOOR(to_char(d,'mi')/15),0,'(0-14)',1,'(15-29)',2,'(30-44)',4,'(45-59)') Date_avg,
         avg(s) ss
  from t
  group by to_char(d,'dd.mm.yyyy hh24')||' '|| decode(FLOOR(to_char(d,'mi')/15),0,'(0-14)',1,'(15-29)',2,'(30-44)',4,'(45-59)')
...
Рейтинг: 0 / 0
31.05.2017, 10:43
    #39462924
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
MaximaXXL,
проще
group by trunc(d,'hh24'),FLOOR(to_char(d,'mi')/15)

.....
stax
...
Рейтинг: 0 / 0
31.05.2017, 11:05
    #39462939
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
stax..,

у меня trunc(d,'hh24') выводит 31-MAY-17 и не показывает время (часы)
посему я от него отказался
...
Рейтинг: 0 / 0
31.05.2017, 11:22
    #39462950
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
MaximaXXLу меня trunc(d,'hh24') выводит 31-MAY-17 и не показывает время (часы)
посему я от него отказалсяТакой весь из себя помогатый, а базовых вещей не понимаешь?
...
Рейтинг: 0 / 0
31.05.2017, 11:28
    #39462954
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
MaximaXXLstax..,

у меня trunc(d,'hh24') выводит 31-MAY-17 и не показывает время (часы)
посему я от него отказался
странно, у меня показало
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  1   with t as (
  2    select to_date('31.05.2017 09.00','dd.mm.yyyy hh24:mi') d,1 s from dual union all
  3    select to_date('31.05.2017 09.13','dd.mm.yyyy hh24:mi') d,10 from dual union all
  4    select to_date('31.05.2017 09.14','dd.mm.yyyy hh24:mi') d,2 from dual union all
  5    select to_date('31.05.2017 09.15','dd.mm.yyyy hh24:mi') d,20 from dual union all
  6    select to_date('31.05.2017 09.29.59','dd.mm.yyyy hh24:mi.ss') d,200 from dual
  7    )
  8    select to_char(trunc(d,'hh24'),'dd.mm.yyyy hh24')||' '|| decode(FLOOR(to_char(d,'mi')/15),0,'(0-14)',1,'(15-29)',2,'(30-44)',4,'(45-59)') Date_avg,
  9           avg(s) ss
 10    from t
 11*   group by trunc(d,'hh24'),FLOOR(to_char(d,'mi')/15)
SQL> /

DATE_AVG                      SS
--------------------- ----------
31.05.2017 09 (15-29)        110
31.05.2017 09 (0-14)  4,33333333

SQL>



.....
stax
...
Рейтинг: 0 / 0
31.05.2017, 11:32
    #39462958
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
Elic,

Отчего-же, я понимаю что он транкейтнет до hh24, но при выводе мне все равно пришлось делать to_char .... посему я от него и отказался.
...
Рейтинг: 0 / 0
31.05.2017, 11:34
    #39462960
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса с группирговкой по 15 минут
ElicMaximaXXLу меня trunc(d,'hh24') выводит 31-MAY-17 и не показывает время (часы)
посему я от него отказалсяТакой весь из себя помогатый, а базовых вещей не понимаешь?
та була шютка
все он понимает, но не ....

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


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