2012-05-06 22 views
1

大きなCSVファイルをテーブルにインポートしました。表のサンプルは、私がマッチング点とフィールド値で、右目と左目「感度* 10」の値を比較し、(私は行を意味する)、最高を抽出する必要があり、このカラムの値を比較するテーブルの行を比較するSQLクエリ

name,  eye,point,field,date,seconds,sensitivity*10,slope,intercept,T*1000 

NESSA SONIA ,R,6,4,08-04-09,32658845,160,1.062300e+001,62538, 1282 
NESSA SONIA ,R,6,5,20-05-09,36288632,20, 5.360101e+000,64036, 771 
NESSA SONIA ,R,6,6,02-12-09,53223062,60, 3.425260e+000,64590, 767 
NESSA SONIA ,L,6,4,08-04-09,32658922,230,4.629489e+000,64382, 582 
NESSA SONIA ,L,6,5,20-05-09,36288515,170,2.805373e+000,64901, 511 
NESSA SONIA ,L,6,6,02-12-09,53223059,220,3.528252e+000,64694, 1022 

のように見えます。

たとえば、ポイント、フィールド、および日付が同じで、1番目と4番目を比較し、感度が最も高いので4番目を抽出する必要があります。私は膨大なファイルを持ち、すべての値を抽出する必要があります。誰でもSQLクエリを助けることができます非常に高く評価されます。

+0

t目を2つのテーブルのテーブルlとテーブルrに入れ、ヌルではない値を得ます( 'テーブルl'。*から'テーブルl'を選択します。 'テーブルl')。 'sensitivity = 10'> 10) ユニオン (' table r'。* from 'table r' ' 'table r'。' sensitivity * 10'> 10)ですが、これを比較して、私のデカルト製品を与える – user1375481

答えて

1
(select `table l`.* from `table l`, `table r` 
where `table l`. `sensitivity*10` > 10 and `table l`.`sensitivity*10`>`table r`.`sensitivity*10`) 

union 

(select `table r`.* from `table r`, `table l` 
where `table r`. `sensitivity*10` > 10 and `table r`.`sensitivity*10`>`table l`.`sensitivity*10`) 
+0

私は左右に2つのテーブルに分かれて、このクエリを使用..それを理解しました。ブルーフィート – user1375481

0

SQL MAX()関数とGROUP BYという名前を使用する必要があります。

このような何かしてみてください:私はこれがために働くべきだと思いSQL Group by & Max

+0

申し訳ありません、それは仕事をしなかった、それは私にポイントとフィールドを持っている単一の行を与えました。しかし、私はポイントフィールドと日付が同じである左右の目(感度値)を比較する必要があります。画像の1行目と4行目を確認してください。 – user1375481

+0

でも、同じポイントとフィールドを持つ行が表示されていますが、他の行と比較していません。 – user1375481

+0

ええ、 'MAX()'は全体的に 'max'を取得しています。そのため、返される行は1つだけです。私はまだ一人ひとりのために「最大」を得る方法を見つけようとしています。 'MAX(sensitivty * 10)'はおそらくサブクエリ内の他の場所に移動する必要があります。私はSQLでベストを試していますが、申し訳ありません... –

0

:この他のStackOverflowのQ &で興味のあるものにクエリ似ていた見て、また

SELECT * 
FROM (
    SELECT point, field, MAX(sensitivty*10) AS max 
    FROM table 
    GROUP BY 
      name 
    ) tbl 
JOIN table 
ON  table.point = tbl.field 

をあなた:

私は左とRIGHを分離している
select if(t1.sensitivity*10 > t2.sensitivity*10,t1.sensitivity*10,t2.sensitivity*10) as col1 
from table t1 
inner join table t2 
    on t1.field = t2.field 
    and t1.point = t2.point 
    and t1.date = t2.date 
where t1.eye ='R' and t2.eye ='L' 
+0

動作しませんでした。それは私にNULL行を与えている – user1375481

+0

@bluefeet私はクエリがかなり正しいとは思わない、私は 'field = point'あなたのクエリで表示されていないよ。アドバイスできますか?ありがとう –

+0

RとLの目がそれぞれのテーブルにある場合、 'WHERE'節を取り除く方法はありますか? –

関連する問題