2010-12-17 8 views
2

データベースに2つのカラムがあるとします(col1col2)。列2は時間、列1は何かです。私の質問では、次のようにしたいと考えています:SQLクエリグループ化パラメータの最大値

SELECT *私のテーブルから結果をグループ化したいのですが、結果はcol1です。しかし、私は、グループ化されたcol1の場合、特定の値よりも高いcol2の値が存在しないエントリのみが必要です。つまり、col2がある値を超えないcol1だけが必要です。 例えば、以下のように、私は、3行を持っていた、場合:

ROW1: col1 = val1, col2 = 3 
ROW2: col1 = val1, col2 = 5 
ROW3: col1 = val2, col2 = 3 
ROW4: col1 = val2, col2 = 4 

をそして私は、その結果として、私は唯一のROW3またはROW4を望む、そして、それらのいずれかの時間が4を超えることはしたくありませんそれは重要ではありません。col1は同じでグループ化されているからです。しかし、行1と行2では、col1の値 "val1"によってグループ化されています。そのうちの1つのcol2 DOESは4を超えています。したがって、それらのいずれも必要ありません。

答えて

2
SELECT col1 FROM table GROUP BY col1 HAVING MAX(col2) <= 4 

グループから共通の値(col1)のみを使用するため、GROUP BYを使用できます。 GROUP BY(集約)問合せを実行する場合は、HAVING句を使用して、集約されたデータ・セットにフィルタを適用できます。

+0

完了!ありがとう。 – arik

1

私は使用していません私はポイントを得ました(私の英語は良くありません)。 サブクエリが最適な選択だと思います。

注:この例では、MySQLで動作するはずです...

SELECT * 
FROM table 
WHERE col1 IN 
    (SELECT col1 FROM table WHERE col2 < 5 GROUP BY col1) 
ORDER BY col1 
+1

注:期待していることが分からない場合(動的テーブルのフィールドはあまり一般的ではありません...) –

1
CREATE TABLE x (
    t TIME NOT NULL, 
    v INT NOT NULL); 

INSERT INTO x VALUES 
    ('13:14:00', 24), 
    ('13:14:00', 27), 
    ('13:14:00', 29), 
    ('17:12:00', 14), 
    ('17:12:00', 20), 
    ('17:12:00', 24); 

SELECT t, MAX(v) AS mv FROM x 
    GROUP BY t 
    HAVING mv <= 25; 

または私は質問を誤解しますか?

関連する問題