各 ID の最大信号クエリ
質問:
複数の信号を含むテーブルが与えられた場合各 ID に関連付けられた値を取得するには、一意の ID ごとに最大信号値を取得するクエリをどのように作成すればよいでしょうか?次のテーブル例を考えてみましょう:
ID Signal Station OwnerID 111 -120 Home 1 111 -130 Car 1 111 -135 Work 2 222 -98 Home 2 222 -95 Work 1 222 -103 Work 2
答え:
Station や OwnerID などの他の列に影響を与えずに各 ID の最大信号値を取得するには、自己join を使用できます:
select cur.id, cur.signal, cur.station, cur.ownerid from yourtable cur where not exists ( select * from yourtable high where high.id = cur.id and high.signal > cur.signal )
このクエリはテーブルをそれ自体と結合してデカルト積を作成します。行の各ペアについて、2 番目の行 (high) の信号値が最初の行 (cur) の信号値より大きいかどうかをチェックします。同じ ID でより高い信号値が見つかった場合、現在の行は除外されます。
結果は、各 ID の最大信号値を持つ行のみを含むテーブルになります。テーブルの例の場合、出力は次のようになります:
ID Signal Station OwnerID 111 -120 Home 1 222 -95 Work 1
以上がSQL テーブル内の各 ID の最大信号値を見つける方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。