从表1中的每条记录中查找表2中最新日期的记录

时间:2018-08-14 10:19:48

标签: sql ms-access

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

表格网站: SitesID,名称,城市,Modality_A(是/否),Modality_B(是/否),Modality_C(是/否)

表访问: VisitsID,SitesID,开始日期,VisitorID,VisitTypeID,模式(A / B / C)

我现在想从“网站”中的每条记录中获取信息

  • 访问次数(次数)

  • 最近的Visits.Startdate

  • 最近的开始日期对应的VisitorID和VisitTypeID。

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

最后但并非最不重要的一点是,我希望能够对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)不起作用,它不会提供上次访问的访问者,而是给出具有最高编号的visitorID。

MAX VisitTypeID不起作用,它没有提供上次访问的VisitTypeID,而是给出了具有最高编号的VisitTypeID

我找不到如何使它工作的方法。有任何想法吗?当然,到目前为止,还有一个完整的其他SQL也可以:)

非常感谢!

1 个答案:

答案 0 :(得分:0)

我会这样处理:

  • 使用extension Sequence where Iterator.Element: Hashable { func uniqueOrdered() -> [Iterator.Element] { return reduce([Iterator.Element]()) { $0.contains($1) ? $0 : $0 + [$1] } } } class Inbox: Hashable { ... ... static func == (lhs: User, rhs: User) -> Bool { return lhs.userID == rhs.userID } } arrayOfRels.uniqueOrdered() join获取最新日期和计数。
  • 一个group by,用于获取有关访客的其他信息。
  • 用于过滤情态的join子句。

这看起来像:

where