SQL / Access 2010 - 按名称分组并过滤数据

时间:2018-04-06 10:06:08

标签: sql ms-access filter group-by

我在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

我的问题是在对名称进行分组时尝试过滤此数据。

2 个答案:

答案 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;