希望标题不会太混乱。这是我的代码
SELECT SRV_NAME, TOT_CPU, TOT_MEM, SNAP_DATE
FROM capacity2.SRV_CAPACITY_UNIX
WHERE TOT_CPU >= 90 OR TOT_MEM >= 90 AND SNAP_DATE BETWEEN to_date('14-jun-2012 00:00:00', 'dd-mon-yyyy hh24:mi:ss') AND to_date('14-jul-2012 00:00:00', 'dd-mon-yyyy hh24:mi:ss')
ORDER BY SRV_NAME desc, SNAP_DATE desc;
代码返回的数据样本如下:
SNAP_DATE TOT_CPU TOT_MEM SRV_NAME
6/22/2012 0:00 99.98 70.86 server555
6/22/2012 0:05 99.98 70.9 server555
6/22/2012 0:10 99.98 70.93 server555
6/22/2012 0:15 99.98 71.06 server555
6/22/2012 0:20 99.98 70.87 server555
...
6/22/2012 23:35 99.97 71.12 server555
6/22/2012 23:40 99.99 71.12 server555
6/22/2012 23:45 99.97 71.12 server555
6/22/2012 23:50 99.98 71.12 server555
6/22/2012 23:55 99.98 71.12 server555
目标:
在给定的持续时间内(在这种情况下为一个月)提取服务器(服务器在capacity2.SRV_CAPACITY_UNIX
数据库中)的数据,这些数据是90%及以上(TOT_CPU
和TOT_MEM
) /30天)。我需要绘制这些数据的图形,默认情况下,每5分钟记录一次数据,因此在大约30天的时间内,我在一天内剩下288行。这是我留下的大约8,600行,用于在图表上绘图,这显然是不切实际的。
因此,我需要做的是编写一个SQL查询,它只会提取每天的平均TOT_CPU
和TOT_MEM
,因此我只剩下需要绘制的30行数据30天(每天一行)。
这是我第一次使用Stack Overflow,所以我试图尽可能清楚。如果您需要任何信息,我一定会提供。
答案 0 :(得分:1)
基于TO_DATE
函数,我假设这是Oracle。因此,它应该看起来像这样:
select SRV_NAME, TRUNC(SNAP_DATE) SNAP_DATE,
avg(TOT_CPU) AVG_TOT_CPU, avg(TOT_MEM) AVG_TOT_MEM
FROM capacity2.SRV_CAPACITY_UNIX
WHERE TOT_CPU >= 90 OR TOT_MEM >= 90
AND SNAP_DATE BETWEEN to_date('14-jun-2012 00:00:00', 'dd-mon-yyyy hh24:mi:ss')
AND to_date('14-jul-2012 00:00:00', 'dd-mon-yyyy hh24:mi:ss')
group by SRV_NAME, TRUNC(SNAP_DATE)
请注意,这也是由服务器细分的,您可能会为每台服务器绘制一个系列。
另请注意,如果有任何机会,特定日期没有记录数据,那么结果中不会出现那天,您的绘图逻辑应该处理。