首页 > 解决方案 > 分组结果的 SQL 查询帮助

问题描述

我有一个具有以下格式的访问表:

CostomerID、PhoneType、LastUsedDate、PhoneNumber

我想编写一个查询,按类型为我提供每个客户的最新电话号码。所以假设我们有

CostomerID, PhoneType, LastUsedDate, PhoneNumber
987/Landline/201809/555-343-9017
987/Landline/201610/555-397-0975
987/Cell/201811/555-870-1862

我希望查询为客户 987 生成结果,他的座机号码来自 201809,他的手机号码来自 201811。到目前为止,我已经想出了

SELECT  p.CnBio_ID, p.Type, max(p.Subj_Date_Last_Seen_1) as maxdate
  from Phones p
  GROUP BY p.CnBio_ID, p.Personal_Business, p.Type

这会生成每个 ID 和类型的最新日期,但我不知道如何将与该数据对应的电话号码添加到结果中?

编辑:我应该补充一点,每一行也有它的唯一标识符,如果有帮助的话。

标签: sqlms-access

解决方案


你可以试试correlated subquery

SELECT  p.CnBio_ID, p.Type, p.Subj_Date_Last_Seen_1 as maxdate
from Phones p
where p.Subj_Date_Last_Seen_1 in (select max(p.Subj_Date_Last_Seen_1) from phones p1 
where p1.CnBio_ID=p.CnBio_ID and p1.Type=p.Type group by p1.CnBio_ID, p1.Type)

或者您可以尝试使用row_number()

select * from
(
SELECT  p.CnBio_ID, p.Type, p.Subj_Date_Last_Seen_1,row_number() over(partition by  p.CnBio_ID, p.Type order by p.Subj_Date_Last_Seen_1 desc) as rn
from Phones p
)A where rn=1

推荐阅读