2012-03-27 3 views
0

두 개의 테이블이 있습니다.두 테이블에서 MAX (날짜) 값 가져 오기

MainTable: 
MainID | LastValue | LastReadingDate 
1  | 234  | 01.01.2012 
2  | 534  | 03.02.2012 

Readings: 
MainID | ValueRead | ReadingDate 
1  | 123  | 03.02.2012 
1  | 488  | 04.03.2012 
2  | 324  | 03.02.2012 
2  | 683  | 05.04.2012 

내가 즉

SELECT MainTable.MainID, MainTable.LastValue, MainTable.LastReadingDate, (SELECT ValueRead, MAX(ReadingDate) 
FROM Readings 
WHERE Readings.MainID=MainTable.MainID ORDER BY ValueRead) 

을 얻으려면, 나는 독서의 최신 ReadingDate와 현재 LastValue 및 LastReadingDate MainTable에서 측면을 따라 ValueRead을 싶어.

답변

3

다음은 사용할 수있는 쿼리입니다. 아직 "읽기"항목이없는 항목을 포함하여 모든 MainTable 항목이 표시됩니다. LEFT JOIN을 INNER JOIN으로 변경하십시오.

WITH LastReads AS (

SELECT ROW_NUMBER() OVER (PARTITION BY MainID ORDER BY ReadingDate DESC) AS ReadingNumber, 
MainID, 
ValueRead, 
ReadingDate 

FROM Readings 

) 

SELECT M.MainID, M.LastValue, M.LastReadingDate, R.ValueRead, R.ReadingDate 
FROM MainTable M 
LEFT OUTER JOIN LastReads R 
ON M.MainID = R.MainID 
AND R.ReadingNumber = 1 -- Last reading, use 2 or 3 to get the 2nd newest, 3rd newest, etc. 

SQLFiddle 링크 : http://sqlfiddle.com/#!3/16c68/3

mainid 당 수치의 N 번호가 또 다른 링크 : http://sqlfiddle.com/#!3/16c68/4

0

자신이 시도하지만, 여기에 간다하지 않습니다.

select max(r.readingdate), max(t.lastvalue), max(t.lastreadingdate) 
from readings r inner join 
(select MainID, LastValue, LastReadingDate 
    from MainTable m 
    where LastReadingDate = 
     (select max(minner.LastReadingDate) 
     from MainTable minner 
     where minner.MainID = m.MainID 
    ) 
) t 
on (r.mainid = t.mainid) 
0

이 시도 시도하십시오 :

select M.LastValue, M.LastReadingDate, 
     (select top 1 ValueRead from Readings where MainID=M.MainID order by ReadingDate desc) 
from MainTable M 
관련 문제