具有最大功能的SQL INNER JOIN DISTINCT

Vij*_*jay -1 sql sql-server-2005

我有表tbMeasurement和tbPatientMeasurement.

tbMeasurement

MeasurementIDP
MeasurementName
Run Code Online (Sandbox Code Playgroud)

tbPatientMeasurement

PatientMeasurementIDP
MeasurementIDF
MeasurementValue
Taken (Datetime)
Run Code Online (Sandbox Code Playgroud)

执行以下查询时:

SELECT DISTINCT dbo.tbMeasurement.MeasurementName
      , dbo.tbPatientMeasurement.MeasurementValue
      , dbo.tbPatientMeasurement.Taken
  FROM dbo.tbMeasurement
 INNER JOIN dbo.tbPatientMeasurement
   ON  dbo.tbMeasurement.MeasurementIDP = dbo.tbPatientMeasurement.MeasurementIDF
Run Code Online (Sandbox Code Playgroud)

这将返回其中一个MeasurementName的双重条目.我也想要MeasurementName,MeasurementValue by max Taken(datetime).

Dev*_*art 5

试试这个 -

SELECT DISTINCT 
      m.MeasurementName
    , p2.MeasurementValue
    , p2.Taken
FROM dbo.tbMeasurement m
JOIN (
    SELECT 
          p.MeasurementValue
        , Taken = MAX(p.Taken) 
    FROM dbo.tbPatientMeasurement p 
    GROUP BY m.MeasurementName, p.MeasurementValue
) p2 ON m.MeasurementIDP = p2.MeasurementIDF
Run Code Online (Sandbox Code Playgroud)