2013-05-28 113 views
-1

我有表tbMeasurement和tbPatientMeasurement。SQL INNER JOIN DISTINCT與最大功能

tbMeasurement

MeasurementIDP 
MeasurementName 

tbPatientMeasurement

PatientMeasurementIDP 
MeasurementIDF 
MeasurementValue 
Taken (Datetime) 

在做下面的查詢:

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 

這將返回Measu之一的雙項rementName。 ,我也想MeasurementName,MeasurementValue by max Taken(datetime).

+0

歡迎StackOverflow上。請正確標記您的問題,至於你使用的RDBMS,SQL Server,MySQL,Oracle等?這樣你將獲得更多的知名度和更多的機會獲得答案。 – Yaroslav

回答

3
SELECT 
     m.MeasurementName 
    , p.MeasurementValue 
    , a.Taken 
FROM dbo.tbMeasurement m 
INNER JOIN dbo.tbPatientMeasurement p ON m.MeasurementIDP = p.MeasurementIDF 
INNER JOIN 
(
select MeasurementIDF,MAX(Taken) as taken 
from tbPatientMeasurement 
group by MeasurementIDF 
) a on a.MeasurementIDF=p.MeasurementIDF and a.taken=p.Taken 
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 
+0

我想明確MeasurementName,但在這裏它顯示多個時間... – Vijay

+0

您被要求指定SQL服務器類型 - 解決方案取決於它。 – Arvo

+0

我正在使用SQL Server 2005和新的SQL Server,所以我不知道SQL Server類型。 – Vijay