【问题标题】:SQL: Select Top 2 Query is Excluding Records with more than 2 RecordsSQL: Select Top 2 Query is Excludes Records with more than 2 Records
【发布时间】:2017-03-20 18:37:58
【问题描述】:

我在 MS Access 中编写查询时遇到问题后才加入。我正在尝试编写一个查询,该查询将从复制的样本结果列表中提取前两个有效样本,然后希望对样本值进行平均。我编写了一个查询,它使用 only 两个有效样本提取样本并将这些值取平均值。但是,我的查询不会提取有两个以上有效样本结果的样本。这是我的查询:

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

提前感谢您的帮助!

【问题讨论】:

  • 我认为问题在于,当您想要比较来自内部查询的一个和来自外部查询的一个时,您正在将 samp_name 与同一张表中的 samp_name 进行比较。下面来自 Gordon 的示例说明了我的意思。

标签: sql ms-access


【解决方案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)

【讨论】:

  • 对于 OP 的问题中的示例,此查询将给出 17 的平均值。至少在我使用 SSMS 时是这样。我还没有检查过 MS Access。
猜你喜欢
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
  • 2022-12-19
  • 2015-08-14
  • 2017-05-21
  • 2021-05-04
  • 2022-12-01
  • 1970-01-01
相关资源
最近更新 更多