首页 > 解决方案 > 从表一中的每条记录中查找表二中日期最近的记录

问题描述

我的 Ms Access 2010 项目中有两个表:一个包含站点信息和模式的站点表,以及一个包含访问信息的访问表。

表站点:SitesID、名称、城市、Modality_A(是/否)、Modality_B(是/否)、Modality_C(是/否)

表访问:VisitsID、SitesID、Startdate、VisitorID、VisitTypeID、Modality (A/B/C)

我现在想从站点中的每条记录中获取

当没有访问某个站点时,该站点仍然必须在列表中。

最后但并非最不重要的一点是,我希望能够过滤 Modality。因此,当我选择模态 A 时,我只想要具有 Sites.modality_A=yes 的站点和具有模态 A 的访问信息。

到目前为止我所拥有的(对于模态 A):

SELECT DISTINCTROW Sites.SitesID, Sites.Name, Sites.City, Max(IIf([Visits].[Modality]="A", [Visits].[Startdate],Null)) AS MaxOfDate, Sum(IIf(Visits.Modality="A",1,0)) AS CountOfVisits, Max(IIf([Visits].[Modality]="A",[Visits].[VisitTypeID],Null)) AS MaxOfVisitTypeID, Max(IIf([Visits].[Modality]="A",[Visits].[VisitorID],Null)) AS MaxOfVisitorID 
FROM Visits RIGHT JOIN Sites ON Visits.SitesID = Sites.SitesID 
WHERE (((Sites.SitesID) In (select Sites.SitesID from Sites where (Sites.Modality_A=Yes))) GROUP BY Sites.SitesID, Sites.Name, Sites.City ORDER BY Max(IIf([Visits].[Modality]="A",[Visits].[Startdate],Null)) DESC;"

这工作得相当好,但有两个问题:

MAX(visitorID) 不起作用,它给出的不是最后一次访问的访问者,而是具有最高数字的访问者ID。

MAX VisitTypeID 不起作用,它给出的不是上次访问的 VisitTypeID,而是数字最高的 VisitTypeID

我找不到如何使这项工作。有任何想法吗?当然,到目前为止,我所拥有的完整的其他 SQL 也很好:)

非常感谢!!

标签: sqlms-access

解决方案


我会这样处理:

  • Ajoingroup by获取最近的日期和计数。
  • Ajoin获取有关访问者的附加信息。
  • 用于过滤模态的where子句。

这看起来像:

select sv.*, v.visitorid, v.visittypeid
from (select s.sitesId, s.name, s.modality,
             count(v.visitId) as numvisits,
             max(v.startdate) as maxdate
      from sites as s left join
           visits as v
           on s.sitesid = v.sitesId
      group by  s.sitesId, s.name, s.modality
     ) as sv left join
     visits as v
     on v.sitesId = sv.sitesId and v.startdate = sv.maxdate
where sv.modality = "A";

推荐阅读