2013-05-28 4 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 

Это возвращает двойной записи одного из колбы rementName. и я также хочу MeasurementName,MeasurementValue by max Taken(datetime).

+0

Добро пожаловать в StackOverflow. Пожалуйста, правильно пометьте свой вопрос, какие СУБД вы используете, 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-сервером, поэтому я не знаю о типе SQL Server. – Vijay