首页 > 解决方案 > 如何获取每个类别 SQL 的最低 ID

问题描述

我有以下表是sql

诊断

DiagnosisID
DiagnosisDescription

成员

MemberID
FirstName
LastName

诊断分类图

DiagnosisCategoryID
DiagnosisID

会员诊断

MemberID
DiagnosisID

我需要做的是找到每个成员类别中存在的最低 DiagnosisID 的诊断

这是我到目前为止的sql:

SELECT MD.MemberID AS MID,
  MD.DiagnosisID AS DID,
  DM.DiagnosisCategoryID AS CID
FROM
  MemberDiagnosis MD
    INNER JOIN DiagnosisCategoryMap DM ON MD.DiagnosisID = DM.DiagnosisID

这给了我这个结果集:

> MID  DID  CID
>  1    2    2
>  1    4    3
>  3    3    3
>  3    4    3

我需要的结果集应该是这样的:

> MID   DID   CID
   1     2     2
   3     3     3

我的查询中缺少什么。

我曾尝试进行 group by,但(当然)效果不佳,因为我无法为 group by 正确聚合。

我正在使用 SQL SERVER,这就是我可以使用的全部

标签: sqlsql-server

解决方案


使用MIN聚合获取每个 MemberID 和 DiagnosisCategoryID 的最小 DiagnosticID,使用 GROUP BY

SELECT MD.MemberID AS MID,
  MIN(MD.DiagnosisID) AS DID,
  DM.DiagnosisCategoryID AS CID
FROM
  MemberDiagnosis MD
  INNER JOIN DiagnosisCategoryMap DM ON MD.DiagnosisID = DM.DiagnosisID
GROUP BY
    MD.MemberID,
    DM.DiagnosisCategoryID

推荐阅读