Select 3 个不同的列 return 5 个列

Select 3 Distinct columns return 5 columns

SELECT DoctorId, Plan, StartDate, EndDate,Status
From DoctorContracts

DoctorContracts Table 中我需要 Distinct doctoridplanStartDate 但我需要得到 StatusEnddate

但是有一个组列是 CA 或 NH。我需要 CA 或 NH 之间的最小开始日期。

示例

DOCTORID.        PLAN.      STARTDATE.          ENDATE.          STATUS.     GROUP
9978.            Abc.       11/2/2010.          11/2/2015.       Z.          CA 
9978.            Abc.       11/2/2013.          11/2/2015.       N.          NH  
9978.            Xxx.       12/3/2011.          12/3/2015.       Z.          CA
9978.            Xxx.       10/3/2001.          12/6/2015.       Z.          NH

我使用ROW_NUMBER函数https://msdn.microsoft.com/en-us/library/ms186734.aspx:

您的 SQL 应该是这样的:

SELECT DISTINCT d.[DoctorId]
      , d.[Plan]
      , d.[StartDate]
      , d.[EndDate]
      , d.[Status]
FROM DoctorContracts as d
    INNER JOIN 
        (SELECT [GROUP]
              , [STARTDATE]
              , ROW_NUMBER() OVER(PARTITION BY [GROUP] ORDER BY [STARTDATE] ASC) AS Row
         FROM DoctorContracts) as t
    ON d.[GROUP] = t.[GROUP]
        AND d.[STARTDATE] = t.[STARTDATE]
        AND t.[Row] = 1

您根据按组划分的最小日期创建一个子集,然后过滤到最早的日期。

我已经在 SSMS 中测试过,它按要求工作。