Привет, у меня есть таблица, в которой каждые 5 секунд вставляются новые строки. Ниже приведен запрос, который я использую для получения последней записи каждого идентификатора индекса с максимальным значением index_end_time.

enter image description here

Теперь мне нужно проверить, есть ли записи, для которых MAX (INDEX_END_TIME) истек более чем на 5 минут, чем текущая системная отметка времени.

Что-то вроде ниже

SELECT  count(INDEX_ID) 
  FROM PS8BPMDB.BPM_TASK_INDEX_JOB 
  GROUP BY INDEX_ID 
  HAVING   MAX(INDEX_END_TIME) > SYS_EXTRACT_UTC(SYSTIMESTAMP)UTC_SYS - 5 minutes;
0
Harish Puli 8 Июн 2021 в 16:25

2 ответа

Лучший ответ

Для выполнения вычислений в столбце типа данных TIMESTAMP вам необходимо использовать тип данных INTERVAL.

SELECT count(INDEX_ID) 
  FROM PS8BPMDB.BPM_TASK_INDEX_JOB 
  GROUP BY INDEX_ID 
HAVING MAX(INDEX_END_TIME) > systimestamp - interval '5' minute;
2
Koen Lostrie 8 Июн 2021 в 13:34

Другой запрос .. Я хотел проверить, прошло ли index_end_time последней записи более 5 минут ..

select count(*) from (SELECT MAX(INDEX_END_TIME) as max_end_time,  INDEX_ID as idx_id FROM PS8BPMDB.BPM_TASK_INDEX_JOB GROUP BY INDEX_ID)
where max_end_time < SYS_EXTRACT_UTC(SYSTIMESTAMP)- interval '5' minute;
0
Wai Ha Lee 8 Июн 2021 в 16:47