【问题标题】:SubQueries in MS ACCESS: selecting only one record per "person" per dateMS ACCESS 中的子查询:每个日期每个“人”只选择一条记录
【发布时间】:2010-10-27 08:54:21
【问题描述】:

我在 Microsoft Access 中使用了一个名为已分析的表。它有很多字段,但在这种情况下用于过滤的三个字段是analyzed.readings_miu_id、analyzed.ReadDate、analyzed.ReadTime。我需要从“已分析”表中提取记录,其中将 readings_miu_id 分组在一起,然后按 ReadDate 排序,但仅显示所述日期的最后一个条目,这可能是 ReadTime 中的最高值时间。我创建了一个查询:

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);

*????*** 被用来表明我不知道该放什么

如果我输入了一个有效的 readings_miu_id,我会得到一条该 readings_miu_id 时间最长的记录。

我如何使用像上面这样的子查询来仅提取每个 ReadDate 每个 readings_miu_id 的最后一个 ReadTime?

readings_miu_id不是表ID,更像是Item Number或Name

【问题讨论】:

  • 那么有人能告诉我为什么我被否决了吗?我的问题有问题还是有人只是想获得“评论家”徽章?

标签: sql ms-access select subquery


【解决方案1】:
 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);

我只是将主表别名为 A 并在子查询中引用它。不确定是否需要在子查询中按 ReadDate 进行过滤。

【讨论】:

  • 这就是我要找的东西,谢谢。我不知道你可以创建一个这样的表的副本来交叉引用 sql 正在查看的行。谢谢
  • 从我的朋友那里得到了一点帮助。
【解决方案2】:

这会让你接近。 “将 readings_miu_id 组合在一起”的说法让我感到困惑。不确定您是否需要 GroupBy 或对该字段进行排序。此查询将为您提供分析表中具有相同日期的记录,但该给定日期的“最大:”时间。听起来这就是你想要的。

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

【讨论】:

  • 我认为 Top 1 应该注意获取最新的阅读时间。
  • 这里的 max() 将为每个 ReadDate 组提供一行。
  • 那么他只需要在子查询的where子句中包含ReadDate即可。
  • 这很接近,但它只返回每天最高时间分组而不是每天最高时间 Per readings_miu_id 即每个 readings_miu_id 有多天,我只需要每个 readings_miu_id 每天的最高时间。不过还是很有帮助的,谢谢。
猜你喜欢
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
相关资源
最近更新 更多