Группировка по дням - PullRequest
       1

Группировка по дням

0 голосов
/ 12 ноября 2018

У меня есть таблица MSGCOUNT, которая выглядит следующим образом:

SERVER  CHANNEL  VALUE  VARIABLE      VARNAME      DATES      TIME
---------------------------------------------------------------------
1       A        133    MessageCount  MSG_COUNT_A 12-NOV-18  10:16:56
1       A        129    MessageCount  MSG_COUNT_A 12-NOV-18  10:13:26
1       A        120    MessageCount  MSG_COUNT_A 12-NOV-18  10:00:55 
2       B        210    MessageCount  MSG_COUNT_B 12-NOV-18  21:42:45 
2       B        200    MessageCount  MSG_COUNT_B 12-NOV-18  21:41:25
2       B        195    MessageCount  MSG_COUNT_B 12-NOV-18  21:41:19

Я хочу получить общее количество сообщений, приходящих за день.

Результат запроса будет выглядеть следующим образом:

SERVER  CHANNEL  VALUE  VARIABLE      VARNAME      DATE      
----------------------------------------------------------
1       A        13    MessageCount  MSG_COUNT_A 12-NOV-18
2       B        15    MessageCount  MSG_COUNT_B 12-NOV-18

Я пытался использовать различные функции, аналитические и другие, но следующая попытка является следующей:

select server, channel, value, variable, varname, date
from 
    (
      select time_interval as start_interval,
             time_interval as end_interval,
             round(MSG, 2) total_msg_recv,
             channel,
             server
      from
          (
            select substr(DATES, 1,9),
                   round(VALUE,2) MSG,
                   channel,
                   server
            from MSGCOUNT 
          )
    )
group by date, server, channel
order by date

Это приводит к следующему результату (что неверно):

SERVER CHANNEL VALUE VARIABLE     VARNAME       DATE
-----------------------------------------------------
1      A       133   MessageCount  MSG_COUNT_A  12-NOV-18
2      B       210   MessageCount  MSG_COUNT_B  12-NOV-18

Спасибо

1 Ответ

0 голосов
/ 12 ноября 2018

Разве простое вычитание не выполнит работу?

SQL> with msgcount(server, channel, value, dates) as
  2    (select 1, 'a', 133, date '2018-11-12' from dual union all
  3     select 1, 'a', 129, date '2018-11-12' from dual union all
  4     select 1, 'a', 120, date '2018-11-12' from dual union all
  5     --
  6     select 2, 'b', 210, date '2018-11-12' from dual union all
  7     select 2, 'b', 200, date '2018-11-12' from dual union all
  8     select 2, 'b', 195, date '2018-11-12' from dual
  9    )
 10  select server, channel, max(value) - min(value) diff, dates
 11  from msgcount
 12  group by server, channel, dates
 13  order by server;

    SERVER C       DIFF DATES
---------- - ---------- ----------
         1 a         13 12.11.2018
         2 b         15 12.11.2018

SQL>

Неясно, что DATES и TIME есть / есть (какой тип данных);по моему мнению, это должен быть один столбец типа DATE.Если это так, вы должны TRUNC съесть его (например, TRUNC(DATES)) и удалить компонент времени, так как здесь это не имеет большого значения.

Если вы предоставите дополнительную информацию, этот запрос может быть изменен, ноОбщая идея все еще должна быть в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...