У меня есть таблица базы данных с именем STATUS_HISTORY
- ID-идентификатор записи (комбинация ID и REV уникальна)
- REV - идентификатор редакции, если есть записьполучить изменение новая запись создается с увеличенным идентификатором ревизии
STATUS - может содержать три значения
UPDATED_BY_ID - идентификатор пользователя, который обновил запись
- UPDATED_TIMESTAMP - когда была обновлена эта запись.
- 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-программы или запрос может предоставить эти результаты.