Мне нужно найти только DB_NAME с максимальным значением LAG_MIN - PullRequest
0 голосов
/ 31 марта 2019
SELECT DISTINCT a.collection_timestamp,
                round((a.value / 60),0) lag_min,
                substr(b.target_name,1,instr(b.target_name,'.',1,1)- 1) db_name
FROM sysman.mgmt_metrics_raw a,
     sysman.mgmt$agents_monitoring_targets b
WHERE a.metric_guid = '26372D42E0B05538E505F330D67E8CEA'
      AND round((a.value / 60),0) > 5
      AND a.target_guid = b.target_guid
      AND b.target_name LIKE '%opp%'
      AND a.collection_timestamp > SYSDATE - 1
ORDER BY a.collection_timestamp ASC;

Возвращает ниже вывода.Но мне нужно найти только DB_NAME с максимальным значением LAG_MIN.Как я могу это сделать?

COLLECTION_TIMESTAM    LAG_MIN DB_NAME
------------------- ---------- ----------
2019-03-31 08:27:29        488 opp449a
2019-03-31 08:29:33        105 opp447a
2019-03-31 08:32:29        493 opp449a
2019-03-31 08:34:32        110 opp447a
2019-03-31 08:37:29        498 opp449a
2019-03-31 08:39:33        115 opp447a

1 Ответ

0 голосов
/ 31 марта 2019

Если вы используете текущий запрос в качестве CTE (я назвал его «temp»), то что-то вроде этого может сделать работу:

WITH temp AS
  (SELECT DISTINCT a.collection_timestamp,
                   round((a.value / 60),0)lag_min,
                   substr(b.target_name,1,instr(b.target_name,'.',1,1)- 1)db_name
     FROM sysman.mgmt_metrics_raw a,
          sysman.mgmt$agents_monitoring_targets b
     WHERE a.metric_guid = '26372D42E0B05538E505F330D67E8CEA'
       AND round((a.value / 60),0)> 5
       AND a.target_guid = b.target_guid
       AND b.target_name LIKE '%opp%'
       AND a.collection_timestamp > SYSDATE - 1
  )
SELECT *
FROM temp
WHERE lag_min = (SELECT MAX(lag_min)
                 FROM temp
                );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...