Teradata - 具有相应日期的数据集的最大值

时间:2012-07-27 21:47:29

标签: sql teradata

这可能很明显,我似乎无法让它正常工作。假设我在过去一年中每天都有各种服务器及其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;

这当然只是给了我每个服务器和每个日期..子查询?分区?任何帮助将不胜感激!

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问题。