分组依据以显示独特的字段
Group by to show unique fields
目前我的代码如下:
SELECT Volunteer.VolunteerID, Volunteer.LastName, Volunteer.FirstName, Observations.VolunteerID, Roost.RoostID, Roost.UTME, Roost.UTMN, Roost.DecimalDegrees, Observations.Date, Location.LocationName, Location.Address, Town.Town
FROM (((Volunteer INNER JOIN Observations ON Volunteer.[VolunteerID]= Observations.[VolunteeriD])
LEFT JOIN Roost ON Roost.[RoostID]= Observations.[RoostID])
LEFT JOIN Location ON Location.[LocationID]= Roost.[LocationID])
LEFT JOIN Town ON Location.[TownID]= Town.[TownID]
ORDER BY Volunteer.LastName, Volunteer.FirstName;
目前我的 table 的一部分看起来像这样:
Observations.VolunteerID | Observations.LocationID | Date
Bob | Main St | 2015-01-01
Bob | Main St | 2015-02-02
Sally | Fox St | 2015-02-02
Dave | Long St | 2015-02-02
Dave | Taylor St | 2015-02-05
Lindsay | New St | 2015-02-01
Lindsay | New St | 2015-02-08
Lindsay | Ray St | 2015-02-10
Lindsay | Main St | 2015-02-25
Lindsay | Taylor St | 2015-02-31
但是,我想添加一个 GROUP BY
语句(我认为),它由 VolunteerID 和 LocationID 分组,所以我得到以下输出。我想知道志愿者去过的每个地点,如果他们多次访问同一个地点,我想查看最近的日期。我如何将其合并到我的原始代码中?
Observations.VolunteerID | Observations.LocationID | Date
Bob | Main St | 2015-02-02
Sally | Fox St | 2015-02-02
Dave | Long St | 2015-02-02
Dave | Taylor St | 2015-02-05
Lindsay | New St | 2015-02-08
Lindsay | Ray St | 2015-02-10
Lindsay | Main St | 2015-02-25
Lindsay | Taylor St | 2015-02-31
已更新代码,但仍然出现语法错误(查询表达式中缺少运算符 'Volunteer.FirstName GROUP BY Observations.VolunteerID'。
SELECT Volunteer.VolunteerID, Volunteer.LastName, Volunteer.FirstName, Observations.VolunteerID, Roost.RoostID, Roost.UTME, Roost.UTMN, Roost.DecimalDegrees, Max([Observations.Date]), Location.LocationName, Location.Address, Town.Town
FROM (((Volunteer INNER JOIN Observations ON Volunteer.[VolunteerID]= Observations.[VolunteeriD])
LEFT JOIN Roost ON Roost.[RoostID]= Observations.[RoostID])
LEFT JOIN Location ON Location.[LocationID]= Roost.[LocationID])
LEFT JOIN Town ON Location.[TownID]= Town.[TownID]
ORDER BY Volunteer.LastName, Volunteer.FirstName
GROUP BY Observations.VolunteerID, Observations.LocationID;
max
和 group by
子句似乎就足够了:
select Observations.VolunteerID, Observations.LocationID, max([Date])
from <...>
group by Observations.VolunteerID, Observations.LocationID
您需要在日期上使用 GROUP BY
和聚合函数 MAX()
。
SELECT VolunteerID, LocationID, MAX(Date)
FROM(
SELECT
Volunteer.VolunteerID,
Volunteer.LastName,
Volunteer.FirstName,
Observations.VolunteerID,
Roost.RoostID,
Roost.UTME,
Roost.UTMN,
Roost.DecimalDegrees,
Observations.Date,
Location.LocationName,
Location.Address,
Town.Town
FROM
(((Volunteer
INNER JOIN Observations ON Volunteer.[VolunteerID]= Observations.[VolunteeriD])
LEFT JOIN Roost ON Roost.[RoostID]= Observations.[RoostID])
LEFT JOIN Location ON Location.[LocationID]= Roost.[LocationID])
LEFT JOIN Town ON Location.[TownID]= Town.[TownID]
ORDER BY Volunteer.LastName, Volunteer.FirstName
) foo
GROUP BY VolunteerID, LocationID
将 ORDER BY
子句放在 GROUP BY
之后。
将Max([Observations.Date])
更改为Max(Observations.Date)
将 SELECT
列表中不是聚合表达式的任何字段表达式添加到 GROUP BY
。
SELECT
Volunteer.VolunteerID,
Volunteer.LastName,
Volunteer.FirstName,
Observations.VolunteerID,
Roost.RoostID,
Roost.UTME,
Roost.UTMN,
Roost.DecimalDegrees,
Max(Observations.Date) AS latest_observation,
Location.LocationName,
Location.Address,
Town.Town
FROM (((Volunteer INNER JOIN Observations ON Volunteer.[VolunteerID]= Observations.[VolunteeriD])
LEFT JOIN Roost ON Roost.[RoostID]= Observations.[RoostID])
LEFT JOIN Location ON Location.[LocationID]= Roost.[LocationID])
LEFT JOIN Town ON Location.[TownID]= Town.[TownID]
GROUP BY
Volunteer.VolunteerID,
Volunteer.LastName,
Volunteer.FirstName,
Observations.VolunteerID,
Roost.RoostID,
Roost.UTME,
Roost.UTMN,
Roost.DecimalDegrees,
Location.LocationName,
Location.Address,
Town.Town
ORDER BY Volunteer.LastName, Volunteer.FirstName;
但是我不确定这种分组是否合适。在这个问题中,您想对 Observations.VolunteerID 和 Observations.LocationID 进行分组。这个更大的 GROUP BY
可能不会给你相同的结果。
如果是这种情况,您可以对 SELECT
字段使用聚合函数,然后从 GROUP BY
中删除该字段。例如...
SELECT Max(Volunteer.LastName)
假设 LastName 对于给定的 VolunteerID 始终相同,Max(Volunteer.LastName)
将为您提供相同的值。
目前我的代码如下:
SELECT Volunteer.VolunteerID, Volunteer.LastName, Volunteer.FirstName, Observations.VolunteerID, Roost.RoostID, Roost.UTME, Roost.UTMN, Roost.DecimalDegrees, Observations.Date, Location.LocationName, Location.Address, Town.Town
FROM (((Volunteer INNER JOIN Observations ON Volunteer.[VolunteerID]= Observations.[VolunteeriD])
LEFT JOIN Roost ON Roost.[RoostID]= Observations.[RoostID])
LEFT JOIN Location ON Location.[LocationID]= Roost.[LocationID])
LEFT JOIN Town ON Location.[TownID]= Town.[TownID]
ORDER BY Volunteer.LastName, Volunteer.FirstName;
目前我的 table 的一部分看起来像这样:
Observations.VolunteerID | Observations.LocationID | Date
Bob | Main St | 2015-01-01
Bob | Main St | 2015-02-02
Sally | Fox St | 2015-02-02
Dave | Long St | 2015-02-02
Dave | Taylor St | 2015-02-05
Lindsay | New St | 2015-02-01
Lindsay | New St | 2015-02-08
Lindsay | Ray St | 2015-02-10
Lindsay | Main St | 2015-02-25
Lindsay | Taylor St | 2015-02-31
但是,我想添加一个 GROUP BY
语句(我认为),它由 VolunteerID 和 LocationID 分组,所以我得到以下输出。我想知道志愿者去过的每个地点,如果他们多次访问同一个地点,我想查看最近的日期。我如何将其合并到我的原始代码中?
Observations.VolunteerID | Observations.LocationID | Date
Bob | Main St | 2015-02-02
Sally | Fox St | 2015-02-02
Dave | Long St | 2015-02-02
Dave | Taylor St | 2015-02-05
Lindsay | New St | 2015-02-08
Lindsay | Ray St | 2015-02-10
Lindsay | Main St | 2015-02-25
Lindsay | Taylor St | 2015-02-31
已更新代码,但仍然出现语法错误(查询表达式中缺少运算符 'Volunteer.FirstName GROUP BY Observations.VolunteerID'。
SELECT Volunteer.VolunteerID, Volunteer.LastName, Volunteer.FirstName, Observations.VolunteerID, Roost.RoostID, Roost.UTME, Roost.UTMN, Roost.DecimalDegrees, Max([Observations.Date]), Location.LocationName, Location.Address, Town.Town
FROM (((Volunteer INNER JOIN Observations ON Volunteer.[VolunteerID]= Observations.[VolunteeriD])
LEFT JOIN Roost ON Roost.[RoostID]= Observations.[RoostID])
LEFT JOIN Location ON Location.[LocationID]= Roost.[LocationID])
LEFT JOIN Town ON Location.[TownID]= Town.[TownID]
ORDER BY Volunteer.LastName, Volunteer.FirstName
GROUP BY Observations.VolunteerID, Observations.LocationID;
max
和 group by
子句似乎就足够了:
select Observations.VolunteerID, Observations.LocationID, max([Date])
from <...>
group by Observations.VolunteerID, Observations.LocationID
您需要在日期上使用 GROUP BY
和聚合函数 MAX()
。
SELECT VolunteerID, LocationID, MAX(Date)
FROM(
SELECT
Volunteer.VolunteerID,
Volunteer.LastName,
Volunteer.FirstName,
Observations.VolunteerID,
Roost.RoostID,
Roost.UTME,
Roost.UTMN,
Roost.DecimalDegrees,
Observations.Date,
Location.LocationName,
Location.Address,
Town.Town
FROM
(((Volunteer
INNER JOIN Observations ON Volunteer.[VolunteerID]= Observations.[VolunteeriD])
LEFT JOIN Roost ON Roost.[RoostID]= Observations.[RoostID])
LEFT JOIN Location ON Location.[LocationID]= Roost.[LocationID])
LEFT JOIN Town ON Location.[TownID]= Town.[TownID]
ORDER BY Volunteer.LastName, Volunteer.FirstName
) foo
GROUP BY VolunteerID, LocationID
将 ORDER BY
子句放在 GROUP BY
之后。
将Max([Observations.Date])
更改为Max(Observations.Date)
将 SELECT
列表中不是聚合表达式的任何字段表达式添加到 GROUP BY
。
SELECT
Volunteer.VolunteerID,
Volunteer.LastName,
Volunteer.FirstName,
Observations.VolunteerID,
Roost.RoostID,
Roost.UTME,
Roost.UTMN,
Roost.DecimalDegrees,
Max(Observations.Date) AS latest_observation,
Location.LocationName,
Location.Address,
Town.Town
FROM (((Volunteer INNER JOIN Observations ON Volunteer.[VolunteerID]= Observations.[VolunteeriD])
LEFT JOIN Roost ON Roost.[RoostID]= Observations.[RoostID])
LEFT JOIN Location ON Location.[LocationID]= Roost.[LocationID])
LEFT JOIN Town ON Location.[TownID]= Town.[TownID]
GROUP BY
Volunteer.VolunteerID,
Volunteer.LastName,
Volunteer.FirstName,
Observations.VolunteerID,
Roost.RoostID,
Roost.UTME,
Roost.UTMN,
Roost.DecimalDegrees,
Location.LocationName,
Location.Address,
Town.Town
ORDER BY Volunteer.LastName, Volunteer.FirstName;
但是我不确定这种分组是否合适。在这个问题中,您想对 Observations.VolunteerID 和 Observations.LocationID 进行分组。这个更大的 GROUP BY
可能不会给你相同的结果。
如果是这种情况,您可以对 SELECT
字段使用聚合函数,然后从 GROUP BY
中删除该字段。例如...
SELECT Max(Volunteer.LastName)
假设 LastName 对于给定的 VolunteerID 始终相同,Max(Volunteer.LastName)
将为您提供相同的值。