SQL-запрос, чтобы найти изменения в статусе в течение дня - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть таблица базы данных с именем STATUS_HISTORY

  1. ID-идентификатор записи (комбинация ID и REV уникальна)
  2. REV - идентификатор редакции, если есть записьполучить изменение новая запись создается с увеличенным идентификатором ревизии
  3. STATUS - может содержать три значения

    • OPEN
    • CLOSE
    • INPROGRESS
  4. UPDATED_BY_ID - идентификатор пользователя, который обновил запись

  5. UPDATED_TIMESTAMP - когда была обновлена ​​эта запись.
  6. TASK_ID - задача, для которой меняется статус

Теперь за целый день запись может переходить в разные статусы.

Я ищу запрос, чтобы дать ответ, подобный приведенному ниже:

╔═════════════════╤══════╤════════════╤═══════╗
║ Hour_of_the_day │ OPEN │ INPROGRESS │ CLOSE ║
╠═════════════════╪══════╪════════════╪═══════╣
║ 1               │ 10   │ 0          │ 0     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 2               │ 10   │ 0          │ 0     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 3               │ 10   │ 0          │ 0     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 4               │ 9    │ 1          │ 0     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 5               │ 9    │ 1          │ 0     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 6               │ 8    │ 2          │ 0     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 7               │ 8    │ 2          │ 0     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 8               │ 8    │ 1          │ 1     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 9               │ 8    │ 0          │ 2     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 10              │ 6    │ 2          │ 2     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 11              │ 6    │ 1          │ 3     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 12              │ 5    │ 2          │ 3     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 13              │ 4    │ 3          │ 3     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 14              │ 4    │ 3          │ 3     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 15              │ 2    │ 3          │ 5     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 16              │ 1    │ 2          │ 7     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 17              │ 0    │ 1          │ 9     ║
╟─────────────────┼──────┼────────────┼───────╢
║ 18              │ 0    │ 0          │ 10    ║
╟─────────────────┼──────┼────────────┼───────╢
║ 19              │ 0    │ 0          │ 10    ║
╟─────────────────┼──────┼────────────┼───────╢
║ 20              │ 0    │ 0          │ 10    ║
╟─────────────────┼──────┼────────────┼───────╢
║ 21              │ 0    │ 0          │ 10    ║
╟─────────────────┼──────┼────────────┼───────╢
║ 22              │ 0    │ 0          │ 10    ║
╟─────────────────┼──────┼────────────┼───────╢
║ 23              │ 0    │ 0          │ 10    ║
╟─────────────────┼──────┼────────────┼───────╢
║ 24              │ 0    │ 0          │ 10    ║
╚═════════════════╧══════╧════════════╧═══════╝

Примечание : Предположим, что задача помечена как ОТКРЫТА, и в ней нет измененийстатус за последние 5 часов он должен быть посчитан за все 5 часов.То же самое относится и к другим статусам, таким как close и inprogress, потому что не все записи будут меняться каждый час.

Обычно в каждый час сколько билетов было открыто, закрыто или в процессе.

Я не уверенКак написать запрос для этой логики.но ниже моя попытка, которая дает совершенно другой вывод.

 SELECT TO_CHAR(t.UPDATED_TIMESTAMP , 'HH24') AS hour,
         COUNT(*) AS numPerHour, t.STATUS
    FROM STATUS_HISTORY t
    WHERE t.UPDATED_TIMESTAMP  >= to_date('29-OCT-18','DD-MON-YY')
    AND t.UPDATED_TIMESTAMP     < to_date('30-OCT-18','DD-MON-YY')
GROUP BY TO_CHAR(t.UPDATED_TIMESTAMP , 'HH24'), t.STATUS;

╔═════════════════╤════════════╤════════════╗
║ Hour_of_the_day │ NumPerHour │ INPROGRESS ║
╠═════════════════╪════════════╪════════════╣
║ 06              │ 2          │ OPEN       ║
╟─────────────────┼────────────┼────────────╢
║ 09              │ 5          │ OPEN       ║
╟─────────────────┼────────────┼────────────╢
║ 09              │ 2          │ OPEN       ║
╟─────────────────┼────────────┼────────────╢
║ 09              │ 3          │ CLOSE      ║
╟─────────────────┼────────────┼────────────╢
║ 07              │ 1          │ INPROGRESS ║
╟─────────────────┼────────────┼────────────╢
║ 08              │ 8          │ OPEN       ║
╟─────────────────┼────────────┼────────────╢
║ 11              │ 1          │ CLOSE      ║
╟─────────────────┼────────────┼────────────╢
║ 08              │ 1          │ INPROGRESS ║
╟─────────────────┼────────────┼────────────╢
║ 07              │ 3          │ OPEN       ║
╟─────────────────┼────────────┼────────────╢
║ 11              │ 2          │ CLOSE      ║
╟─────────────────┼────────────┼────────────╢
║ 12              │ 1          │ INPROGRESS ║
╚═════════════════╧════════════╧════════════╝

Я хотел бы понять, есть ли другой способ справиться с этим с помощью Java-программы или запрос может предоставить эти результаты.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Вы можете сделать это с помощью CASE:

SELECT TO_CHAR(t.UPDATED_TIMESTAMP , 'HH24') AS hour,
         COUNT(*) AS numPerHour, sum(case when t.STATUS='OPEN' then 1 ELSE 0 END) AS OPEN,
         sum(case when t.STATUS='CLOSE' then 1 ELSE 0 END) AS CLOSE,
         sum(case when t.STATUS='INPROGRESS' then 1 ELSE 0 END) AS INPROGRESS

    FROM STATUS_HISTORY t
    WHERE t.UPDATED_TIMESTAMP  >= to_date('29-OCT-18','DD-MON-YY')
    AND t.UPDATED_TIMESTAMP     < to_date('30-OCT-18','DD-MON-YY')
GROUP BY TO_CHAR(t.UPDATED_TIMESTAMP , 'HH24'), t.STATUS
0 голосов
/ 21 декабря 2018

Использовать условное агрегирование.

select COUNT( CASE WHEN STATUS = 'OPEN' THEN 1 END ) as OPEN,
       COUNT( CASE WHEN STATUS = 'INPROGRESS' THEN 1 END ) as INPROGRESS,
       COUNT( CASE WHEN STATUS = 'CLOSE' THEN 1 END ) as CLOSE
      ....
      ....
 GROUP BY TO_CHAR(t.UPDATED_TIMESTAMP , 'HH24') --remove t.STATUS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...