2017-03-20 10 views
0

MS Accessでクエリを作成する際に問題が発生した後、私はレプリケートされたサンプル結果のリストから最初の2つの有効なサンプルを引き出し、サンプル値を平均化するクエリを作成しようとしています。私はの2つの有効なサンプルでサンプルを引っ張り、これらの値を平均化するクエリを作成しました。ただし、私のクエリは、2つ以上の有効なサンプル結果がある場合にはサンプルを取得しません。ここに私のクエリです:SQL:Top 2を選択してください。クエリは2レコード以上のレコードを除外しています

SELECT temp_platevalid_table.samp_name AS samp_name, avg (temp_platevalid_table.mean_conc) AS fin_avg, count(temp_platevalid_table.samp_valid) AS sample_count 
FROM Temp_PlateValid_table 
WHERE (Temp_PlateValid_table.id In (SELECT TOP 2 S.id 
            FROM Temp_PlateValid_table as S 
            WHERE S.samp_name = S.samp_name and s.samp_valid=1 and S.samp_valid=1 
            ORDER BY ID)) 
GROUP BY Temp_PlateValid_table.samp_name 
HAVING ((Count(Temp_PlateValid_table.samp_valid))=2) 
ORDER BY Temp_PlateValid_table.samp_name; 

は、ここで私は何をしようとしているの例です:

ID  Samp_Name  Samp_Valid  Mean_Conc 
1  54d2d2  1    15 
2  54d2d2  1    20 
3  54d2d2  1    25 

平均mean_concは17.5である必要があり、しかし、私の現在のクエリで、私は受け取りません54d2d2の場合はすべて値。 2つ以上の有効な値を持つサンプルの値を取得できるように、クエリを微調整する方法はありますか?私はMS Accessを使用しているので、私は気前の良いSQLコード(パーティションなど)を使用できるとは思わないことに注意してください。

ご協力いただきありがとうございます。

+0

問題は、内側のクエリと外部のクエリのいずれかを比較したいときにsamp_nameと同じテーブルのsamp_nameを比較していると思います。下のゴードンの例は、私が何を意味しているかを示しています。 – Mike

答えて

1

これはあなたの欲しいものですか?

select pv.samp_name, avg(pv.value_conc) 
from Temp_PlateValid_table pv 
where pv.samp_valid = 1 and 
     pv.id in (select top 2 id 
       from Temp_PlateValid_table as pv2 
       where pv2.samp_name = pv.samp_name and pv2.samp_valid = 1 
       ) 
group by pv.samp_name; 

avg(pv.value_conc * 1.0)が必要な場合があります。

+0

このクエリは、OPの質問の例について平均17を与えます。少なくとも私はSSMSを使用しています。私はMS Accessでチェックしていない。 – Mike

関連する問題