首页 > 解决方案 > MS Access - 通过聚合函数进行选择

问题描述

我有下表。我想做两件事:我想为拥有多个活动条目的所有人员选择所有行。

PersonName  Address Active  DateUpdated
Adam    Paris   False   09/08/2018
Adam    Dubai   True    17/02/2018
Brendan New York    False   17/02/2018
John    Dublin  True    17/02/2018
John    London  True    09/02/2018
Mike    Miami   False   10/02/2018
Mike    Singapore   False   01/02/2018
Mike    New York    True    01/03/2018
Susan   Los Angeles True    19/02/2018
Susan   Las Vegas   True    17/01/2018
Zara    Berlin  True    05/09/2018
Zara    Madrid  True    12/07/2018
Zara    Houston False   12/09/2018

查询:

select PersonName,Count(PersonName)
from tempTableTest where Active=True
group by PersonName

PersonName  Expr1001
Adam    1
John    2
Mike    1
Susan   2
Zara    2

所以我的结果表应该包含 PersonName=John、Susan 或 Zara 的所有行(因为每个行都有多个 Active=True 的条目)。我希望它看起来像这样-

PersonName  Address DateUpdated Active
John    London  09/02/2018  True
John    Dublin  17/02/2018  True
Susan   Las Vegas   17/01/2018  True
Susan   Los Angeles 19/02/2018  True
Zara    Berlin  05/09/2018  True
Zara    Madrid  12/07/2018  True
Zara    Houston 12/09/2018  False

如果有意义的话,我还想更新 Active=False where DateUpdated<>Max(DateUpdated) 。因此,对于 John,应将 09/02/2018 的行设置为 False(因为有 17/02/2018)对于 Susan 17/01/2018 的行应设置为 False 而 Zara 的 05/09/2018 和2018 年 12 月 7 日应设置为 False。

有人可以帮忙吗?(将不胜感激,在此先感谢!)。

标签: sqlms-access

解决方案


尝试加入一个子查询,该子查询仅限于具有多个活动条目的匹配名称:

SELECT t1.*
FROM tempTableTest t1
INNER JOIN
(
    SELECT PersonName
    FROM tempTableTest
    WHERE Active = True
    GROUP BY PersonName
    HAVING COUNT(*) > 1
) t2
    ON t1.PersonName = t2.PersonName

推荐阅读