2012-07-27 35 views
1

這可能很明顯,我似乎無法讓它正常工作。比方說,過去一年裏,我有一張包含各種服務器及其CPU百分比的表格。我想基本上是這樣的:Teradata - 具有相應日期的數據集的最大值

「爲每一個服務器名,給我最大CPU值,這個服務器命中(從這個數據集)和相應的日期,它發生在」

所以最好我會得到一個導致這樣的:

server1的52.34%,2012年3月16日
服務器2 48.76%,2012年4月15日
server(服務器)98.32%,2012年6月16日
等。

當我嘗試這樣做像這樣,我不能使用ag roup by或else它只顯示我每一個日期:

從cpu_values組中選擇服務器名稱,日期,最大值(cpu)由1,2 order by 1,2;

這當然只是給我每個服務器和每個日期。子查詢?分區通過?任何援助將不勝感激!

回答

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問題。

+0

添加了SQL標籤問題。 ;) – 2012-07-28 14:31:06

1

可以使用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」部分選擇滿足條件的單行。

相關問題