我有一个大的访问表,需要通过查询从中提取特定数据。
我需要获得一份符合特定标准的所有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都符合特定标准的情况下才能输出,但我不确定接下来该怎么办。
如有任何帮助,我们将不胜感激。
数据样本:
日期 | AnimalID | 笼 | |
---|---|---|---|
2022年6月28日 | 1234 | 50 | |
2021年5月19日 | 1234 | 32 | |
2008年3月20日 | 1234 | 75||
2022年5月20日 | 23569 | 4 | |
2022年8月20日 | 23569 | 4 | |
2022年5月20日 | 44444 | 71 | |
2012年8月1日 | 44444 | 4||
2022年4月1日 | 78986 | 30 | |
2022年1月20日 | 78986 | <1>||
2022年9月14日 | 65659 | 59||
2022年10月8日 | 65659 | 48 | |
2022年7月14日 | 65659 | 30 | |
2022年6月14日 | 95659 | 12 | |
2022年8月14日 | 91111 | 51 | |
2022年7月14日 | 91111 | 5 | |
2022年6月14日 | 91111 | 90 | |
2022年8月14日 | 88888 | 4 | |
2022年7月14日 | 88888 | 5 | |
2022年6月14日 | 88888 | 15 |
考虑:
查询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
日期是一个保留字,确实不应该使用保留字作为名称。