Выберите SUM с GROUP BY по дневному интервалу - PullRequest
1 голос
/ 18 июня 2020

У меня есть эта таблица в Oracle База данных:

       date       |   column1   |  column2
01/05/2020 00:00  |     50      |     20
01/05/2020 00:15  |     60      |     30
01/05/2020 00:30  |     70      |     40
       ...        |             |
01/05/2020 23:45  |     80      |     50
02/05/2020 00:00  |     100     |     40
02/05/2020 00:15  |     110     |     35

И у меня есть этот сценарий SELECT:

SELECT
    period,
    liquid    
FROM
    (
        SELECT
            ( nvl(SUM(m.column1), 0) - nvl(SUM(m.column2), 0) ) liquid,            
            TO_CHAR(trunc(m.date), 'dd/MM/YYYY') period
        FROM
            table m
        WHERE
            m.id_register IN (id_register)
            AND m.date BETWEEN TO_DATE('01/05/2020 00:15:00', 'dd/mm/yyyy hh24:mi:ss') AND TO_DATE('01/06/2020 00:00:00', 'dd/mm/yyyy hh24:mi:ss')
        GROUP BY
            TO_CHAR(trunc(m.date), 'dd/MM/YYYY')
    ) vrdm

Мне нужно суммировать (разница в столбце 1 и столбце 2) весь день регистрируется в интервале от 00:15 до 00:00 (следующего дня) в сутки. Как это сделать?

Результат, который мне нужен, такой:

  period   |  liquid
01/05/2020 |   3000     -> SUM(all differences between column1 and column2 between 01/05 00:15 and 02/05 00:00)
02/05/2020 |   4000     -> SUM(all differences between column1 and column2 between 02/05 00:15 and 03/05 00:00)
03/05/2020 |   3500     -> SUM(all differences between column1 and column2 between 03/05 00:15 and 04/05 00:00)

1 Ответ

0 голосов
/ 19 июня 2020

Просто проверьте время в предложении where:

SELECT to_char(trunc(m.dt), 'dd/MM/YYYY') period,
       nvl(SUM(m.column1), 0) - nvl(SUM(m.column2), 0) liquid
  FROM m
  WHERE to_char(m.dt, 'hh24:mi') >= '00:15' 
  GROUP BY trunc(m.dt)

dbfiddle

...