Sql MS ACCESS中的子查询:每个“仅选择一条记录”;“人”;每个日期
我使用的是Microsoft Access中名为Analysized的表。它有许多字段,但在本例中用于过滤的三个字段是analysis.reads\u miu\id、analysis.ReadDate、analysis.ReadTime。我需要从“分析”表中提取记录,在该表中,读数miu id被分组在一起,然后按ReadDate排序,但只显示所述日期的最后一个条目,该条目可能是ReadTime中值最高的时间。我创建了一个查询:Sql MS ACCESS中的子查询:每个“仅选择一条记录”;“人”;每个日期,sql,ms-access,select,subquery,Sql,Ms Access,Select,Subquery,我使用的是Microsoft Access中名为Analysized的表。它有许多字段,但在本例中用于过滤的三个字段是analysis.reads\u miu\id、analysis.ReadDate、analysis.ReadTime。我需要从“分析”表中提取记录,在该表中,读数miu id被分组在一起,然后按ReadDate排序,但只显示所述日期的最后一个条目,该条目可能是ReadTime中值最高的时间。我创建了一个查询: SELECT readings_miu_id, Reading, R
SELECT readings_miu_id, Reading, ReadDate, ReadTime,
MIUwindow, SN, Noise, RSSI, OriginCol, ColID, Ownage
FROM analyzed
WHERE analyzed.ReadDate Between #4/21/2009# and #4/29/2009#
AND analyzed.ReadTime= (
SELECT TOP 1 analyzed.ReadTime
FROM analyzed
WHERE analyzed.readings_miu_id = *????***
ORDER BY analyzed.ReadTime DESC);
****被用来表示我不知道该在这里放什么
如果我输入了一个有效的读数\u miu\id,我会得到一个该读数的最高时间记录\u miu\id
如何使用像上面这样的子查询,只提取每个readings\u miu\id每个ReadDate的最后一次ReadTime
readings\u miu\u id不是表id,它更类似于项目编号或名称这将使您接近。“将读数组合在一起的位置”这句话让我感到困惑。不确定是否要在该字段上使用GroupBy或sort。此查询将为您提供所分析表中具有相同日期但具有给定日期的“最大:”时间的记录。听起来这正是你想要的
SELECT readings_miu_id, Reading, ReadDate, ReadTime, MIUwindow, SN, Noise, RSSI, OriginCol, ColID, Ownage
FROM analyzed ,
(
Select ReadDate as matchDate, Max(ReadTime) as matchTime
FROM analyzed
Where analyzed.ReadDate Between #4/21/2009# and #4/29/2009#
Group by ReadDate
) dateAndTime
WHERE analyzed.ReadDate Between #4/21/2009# and #4/29/2009# AND ReadDate = dateAndTime.matchDate AND readTime = dateAndTime.matchTime
Order By readDate
我只是将主表化名为,并在子查询中引用它。不确定是否需要在子查询中按ReadDate进行筛选。我认为前1名应该负责获取最新的readtime。max()这里将为每个ReadDate组获取一行。然后他只需要在子查询的where子句中包含ReadDate。这很接近,但它只返回每天的最高时间分组,而不是每天的最高每次读取时间,即每个读取时间id有多天,而我只需要每天的最高时间阅读资料。非常有帮助,谢谢。这就是我想要的。谢谢。我不知道您可以创建这样的表副本来交叉引用sql正在查看的行。谢谢朋友们的帮助。有人能告诉我为什么我会被否决吗?我的问题有问题吗?还是有人只是想得到“批评家”的徽章?
SELECT readings_miu_id
, Reading , ReadDate , ReadTime
, MIUwindow, SN, Noise, RSSI
, OriginCol, ColID, Ownage
FROM analyzed AS A
WHERE analyzed.ReadDate Between #4/21/2009# and #4/29/2009#
AND analyzed.ReadTime=
(SELECT TOP 1 analyzed.ReadTime FROM analyzed
where analyzed.readings_miu_id = A.readings_miu_id
AND analyzed.ReadDate = A.ReadDate
ORDER BY analyzed.ReadTime DESC);