我在MS Access 2010中有以下表格作为示例。我需要过滤表格,以便每个名称只有一行。
标准是日期必须是最近的但不迟于今天的日期(4月6日)。
Name Date Team
John 04/04/2018 A
John 02/02/2018 B
James 10/10/2018 A
James 03/03/2018 C
Matt 08/09/2018 D
这是我希望得到的结果。
Name Date Team
John 04/04/2018 A
James 03/03/2018 C
我的问题是在对名称进行分组时尝试过滤此数据。
答案 0 :(得分:3)
尝试以下查询。它使用相关子查询,并筛选出不具有最大日期的行:
SELECT *
FROM table1 t
WHERE t.Date = (SELECT MAX(s.date)
FROM table1 s
WHERE t.Name = s.Name
AND s.Date <= Date())
答案 1 :(得分:0)
如何使用子查询来满足第一个条件(所有日期&lt; =今天,然后选择最大值并将它们分组)
SELECT Student, Max(Date) AS MaxDate, First(Team) AS FirstOfTeam
FROM (SELECT tbl_name.Student, Date, Team
FROM tbl_name
where Date <= Date())
GROUP BY Student;
假设您希望按照第一个对团队进行分组 - 因为您在最近的日期之后并不重要,因为我假设您不会在不同团队中拥有相同的日期条目。
如果这是一个不正确的假设,请告诉我!
如果您希望使用DLookup对团队名称进行排序,可以尝试使用
SELECT Student, Max(Date) AS MaxDate, First(TeamID) AS FirstOfTeam
FROM (SELECT tbl_name.Student, tbl_name.Date, DLookUp("[TEAM]","TBL_TEAM","TeamID='" & Team & "'") AS TeamID
FROM tbl_name
WHERE (((tbl_name.[Date])<=Date())))
GROUP BY Student;