繁体   English   中英

SQL:选择前2个查询将排除具有两个以上记录的记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM