получить данные в 'n' часовом интервале между двумя датами оракула - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь получить данные между двумя датами с интервалами 'n' ... проблема в том, что я не получаю желаемый результат после интервалов 8 часов ... мое значение в интервале 'n' может варьироваться до любое число от 1 до 120. Ниже приведен псевдокод того, что я пытаюсь сделать:

- я сначала выбираю количество часов между двумя датами

 SELECT
24 * (SYSDATE - to_date('2018-04-16 15:20', 'YYYY-MM-DD hh24:mi')) AS diff_hours
FROM dual;

- Затем я использую указанное выше значение в CONNECT BY ROWNUM <= ROUND ((часы между двумя датами / n), 0), чтобы получить данные за n интервалов </strong>

  SELECT TRUNC(sysdate - (rownum/ROUND((24/n),0)),'HH24') as the_hour
        FROM dual
      CONNECT BY ROWNUM <= ROUND((hours between two dates/n),0) ;

Пример запроса

 SELECT
    24 * (SYSDATE - to_date('2018-04-16 15:20', 'YYYY-MM-DD hh24:mi')) AS diff_hours
FROM dual;
  SELECT TRUNC(sysdate - (rownum/ROUND((24/8),0)),'HH24') as the_hour
        FROM dual
      CONNECT BY ROWNUM <= ROUND((724/8),0) ;

Как я могу изменить вышеуказанный запрос, чтобы получать данные с интервалом в n часов между двумя датами, где n - любое количество часов?

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

попробуйте это,

  SELECT TO_DATE(:p_date1, 'MM/DD/YYYY') + (FLOOR((rownum*:p_interval)/24) + (MOD((rownum*:p_interval), 24)/24)) dt
    FROM DUAL 
 CONNECT BY (rownum*:p_interval) <= ((TO_DATE(:p_date2, 'MM/DD/YYYY')+.5) - TO_DATE(:p_date1, 'MM/DD/YYYY') + (MOD((rownum*:p_interval), 24)/24)) * 24
   ORDER BY 1;
0 голосов
/ 17 мая 2018

Удалить первый ROUND() в вашем SELECT

SELECT   TRUNC (SYSDATE - (ROWNUM / (24 / 9)), 'HH24') AS the_hour
   FROM   DUAL
CONNECT BY   ROWNUM <= ROUND ( (724 / 9), 0);
...