1

これはおそらく明らかです。私はそれを正しく機能させることができないようです。過去 1 年間の毎日のさまざまなサーバーとその CPU パーセンテージのテーブルがあるとします。私は基本的に言いたい:

「すべてのサーバー名について、このサーバーが (このデータセットから) ヒットした最大 CPU 値と、それが発生した対応する日付を表示してください」

したがって、理想的には次のような結果が得られます。

server1 52.34% 2012 年 3 月 16 日
server2 48.76% 2012 年 4 月 15 日
server3 98.32% 2012 年 6 月 16 日
など

このようにしようとすると、グループを使用できません。そうしないと、すべての日付が表示されます。

cpu_values グループから servername、date、max(cpu) を 1,2 ずつ 1,2 ずつ選択します。

もちろん、これによりすべてのサーバーとすべての日付が得られます..サブクエリ?で仕切る?任意の支援をいただければ幸いです!

4

2 に答える 2

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」の部分は、条件を満たす単一の行を選択します。

于 2012-07-28T14:37:41.833 に答える
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

PS、次回は「SQL」でタグ付けすることをお勧めします。Teradata の担当者は比較的少数ですが、基本的な SQL の質問に答えてくれる人はたくさんいます。

于 2012-07-27T21:55:38.230 に答える