SQL:选择前2个查询是排除超过2个记录的记录

时间:2017-03-20 18:37:59

标签: sql ms-access

我刚刚在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代码(分区依据等)。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分: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)