[英]SQL: Select Top 2 Query is Excluding Records with more than 2 Records
我在MS Access中编写查询遇到问题后才加入。 我正在尝试编写一个查询,该查询将从复制的样本结果列表中提取前两个有效样本,然后对样本值求平均值。 我编写了一个查询, 仅使用两个有效样本提取样本并取这些值的平均值。 但是,我的查询不会在两个以上有效样本结果的地方提取样本。 这是我的查询:
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的值。 有没有一种方法可以调整查询,以便为具有两个以上有效值的样本获取一个值? 请注意,我正在使用MS Access,所以我认为我不能使用更高级的SQL代码(分区依据,等等)。
在此先感谢您的帮助!
这是你想要的吗?
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)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.