如何对MS Access查询进行分组并使其连续多次仅显示指定字段中具有最大值的行



我有一个大的访问表,需要通过查询从中提取特定数据。

我需要获得一份符合特定标准的所有ID的列表,即连续3个月的笼号小于50。

下面是我目前使用的SQL代码,但它只告诉我过去3个月中哪一个月的框架编号低于50。

SELECT [AbBehWeeklyMonitor Database].AnimalID, [AbBehWeeklyMonitor Database].Date, [AbBehWeeklyMonitor Database].Cage
FROM [AbBehWeeklyMonitor Database]
WHERE ((([AbBehWeeklyMonitor Database].Date)>=DateAdd("m",-3,Date())) AND (([AbBehWeeklyMonitor Database].Cage)<50))
ORDER BY [AbBehWeeklyMonitor Database].AnimalID DESC;

我需要它为每个ID查看过去3个月的情况,并且只有在所有3个ID都符合特定标准的情况下才能输出,但我不确定接下来该怎么办。

如有任何帮助,我们将不胜感激。

数据样本:

754<1>59
日期AnimalID
2022年6月28日123450
2021年5月19日123432
2008年3月20日1234
2022年5月20日235694
2022年8月20日235694
2022年5月20日4444471
2012年8月1日44444
2022年4月1日7898630
2022年1月20日78986
2022年9月14日65659
2022年10月8日6565948
2022年7月14日6565930
2022年6月14日9565912
2022年8月14日9111151
2022年7月14日911115
2022年6月14日9111190
2022年8月14日888884
2022年7月14日888885
2022年6月14日8888815

考虑:

查询1:

SELECT AnimalID, Count(*) AS Cnt
FROM Table1
WHERE (((Cage)<50) AND (([Date]) Between #6/1/2022# And #8/31/2022#))
GROUP BY AnimalID
HAVING (((Count(*))=3));

Query2

SELECT Table1.*
FROM Query1 INNER JOIN Table1 ON Query1.AnimalID = Table1.AnimalID
WHERE ((([Date]) Between #6/1/2022# And #8/31/2022#));

输出:

Date      AnimalID  Cage
6/14/2022   65659   12
7/14/2022   65659   30
8/10/2022   65659   48
6/14/2022   88888   15
7/14/2022   88888   5
8/14/2022   88888   4

日期是一个保留字,确实不应该使用保留字作为名称。

相关内容

  • 没有找到相关文章

最新更新