2016-05-16 1 views
1

次のデータセットでは、 'n'個の異なる結果を選択した結果の最初と最後の間に含まれる行(すべての列) on col1とcol2です。最初のn個の異なる要素(2つ以上の列)の行を選択

pkey | col1 | col2 | day | Other columns... 
1 | a | 1 | 1 | 
2 | b | 2 | 1 | 
3 | b | 2 | 1 | 
4 | c | 3 | 1 | 
5 | c | 4 | 1 | 
6 | a | 5 | 2 | 
7 | a | 5 | 2 | 
8 | b | 6 | 2 | 
9 | c | 7 | 2 | 
10 | c | 8 | 2 | 

のn = 5の場合は、結果がでなければなりません:私はベースとしてSELECT DISTINCT col1, col2 FROM sampletableを使用してしようとしていますが、その後、私は他の列にはアクセスできません

pkey | col1 | col2 | day | Other columns... 
1 | a | 1 | 1 | 
2 | b | 2 | 1 | 
3 | b | 2 | 1 | 
4 | c | 3 | 1 | 
5 | c | 4 | 1 | 
6 | a | 5 | 2 | 
7 | a | 5 | 2 | 

enter image description here

。どのようにこれを達成することができますか?

編集:

変更記述は、私は私の実際のデータに近づくように1から5まで 変更された行6のCOL2と7を望むものについて、より明確にします。

+0

結果セットに 'col1' = b、' col2' = 2の2行、 'col1' = a、' col2' = 1の2行があるのはなぜですか?私はあなたがそれらが異なっている行だけを望むと思った? –

+0

'col1'と' col2'のように見えます。 'char2'と' int'を格納するので、 'col2'は常に区別されます。なぜ 'n = 5'が7行を返しますか?それはちょうど5を返すことになっていないのですか?あなたの質問を明確にしてください。 –

+0

申し訳ありませんが、私は私が欲しいものについて完全にはっきりしていませんでした。私は、最初のものとn個の2列の別個の数によって指し示されるものとの間に含まれる全ての行を選択したい。 – DiegoSahagun

答えて

1
SELECT a.* 
FROM sampletable AS a 
INNER JOIN (SELECT DISTINCT col1, col2 FROM sampletable LIMIT 5) AS b 
ON a.col1 = b.col1 AND a.col2 = b.col2 
+0

これは、結果セットに 'col1'と' col2'を二度与えないでしょうか? '*'ではなく 'a。*'を選んではいけませんか? –

+0

はい、col1/col2の組み合わせは複数回発生する可能性があります。 b-2の組み合わせであなたが望む結果を示しました。はいa。*が好きです。私は編集します。 –

+0

MySQLで 'TOP n'構文が機能しません。サブクエリとして 'SELECT DISTINCT col1、col2 FROM sampletable LIMIT 5'が必要です。 –

0
Select a.* from sampletable a inner join (
    SELECT MIN(pkey) as pkey FROM sampletable GROUP BY col1,col2 limit 5) b on a.pkey = b.pkey 

このクエリを使用してください。

+0

pkeyは常に区別されます。このクエリはすべてのレコードを選択します。 –

+0

入れ子になったクエリの最後に5を置いているので、5つのレコードしか選択しないでください –

+0

ありがとう、結果には7つの行が含まれている必要があります。問題の説明をもっと明確にするために更新しました。 – DiegoSahagun

-1

もう一つ別の方法:

SELECT DISTINCT(CONCAT(col1, col2)) AS fgroup, pkey, day... FROM [table] GROUP BY fgroup LIMIT [LIMIT] 

は、あなたのテーブル名で[テーブル]を交換してください。

[制限]を希望の制限に置き換えます。

"..."を、リストするすべての追加フィールドで置き換えます。

+0

を確認してください。これは構文が正しくない原因になります。グループ内で連結していないため、その列は存在しません。 –

+0

例として、 "..."をカラムで、[table]と[LIMIT]をテーブル名と希望するリミットに置き換える必要があります。私はそれをテストしたので、この方法は、内部結合を使用するよりも最適です(テストのためにクエリの前に "explain"コマンドを追加してください) –

+0

Juan、あなたは依然としてグループの構文エラーを観察していません名前がないかどうか、これは実行されません、あなたもグループで連絡を取る必要があります。それでも欲望の結果を生むことはないでしょう。それを試してみてください。 –

関連する問題