我在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也可以:)
非常感谢!
答案 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