这可能很明显,我似乎无法让它正常工作。假设我在过去一年中每天都有各种服务器及其CPU百分比表。我想基本上说:
“对于每个服务器名称,显示此服务器命中的最大CPU值(来自此数据集)及其发生的相应日期”
理想情况下,我会得到如下结果:
server1 52.34%3/16/2012
server2 48.76%4/15/2012
server3 98.32%6/16/2012
等。
当我尝试这样做时,我不能使用分组,否则它只会显示每个日期:
从cpu_values组中选择servername,date,max(cpu)1,2顺序1,2;
这当然只是给了我每个服务器和每个日期..子查询?分区?任何帮助将不胜感激!
答案 0 :(得分:2)
您可以使用row_number()
OLAP窗口功能:
select servername
, cpu
, date
from cpu_values
qualify row_number() over (partition by servername
order by cpu desc) = 1
请注意,您不需要GROUP BY或ORDER BY子句。 PARTITION子句类似于GROUP BY,ORDER BY子句对每个分区中的行进行排序(在这种情况下,通过降序cpu)。 " = 1" part选择满足条件的单行。
答案 1 :(得分:0)
子查询将是最简单的解决方案:
SELECT
S.Name, Peak.PeakUsage, MIN(S.Date) AS Date
FROM
ServerHistory AS S
INNER JOIN
(
SELECT
ID, MAX(CPUUsage) AS PeakUsage
FROM
ServerHistory
WHERE
Date BETWEEN X AND Y
GROUP BY
ID
) AS Peak ON S.ID = Peak.ID
GROUP BY
S.Name, Peak.PeakUsage
P.S。,下次,你可能想用“SQL”标记。 Teradata的人数相对较少,但很多人可以帮助解决基本的SQL问题。