2012-01-11 5 views
0

SQL Server 2005. 테이블 스키마는 MarketdataID, Datatype, Date, Source, Coordinate, Value입니다. PK는 가치를 제외한 모든 것입니다. 데이터는 여러 출처에서 제공 될 수 있으며 주어진 날짜에 제공되지 않을 수 있습니다. 주어진 날짜 이전에 가장 최근 날짜를 가져오고 날짜 당 하나의 소스 만 가져 오려고합니다.두 SQL 쿼리를 어떻게 하나로 결합 할 수 있습니까?

SELECT top 1 [Source], [Date] FROM Market 
WHERE MarketDataID = ? 
AND DataType = ? 
AND [Date] <= ? 
order by [date] desc, [source] 

다음이 쿼리에서 반환 된 날짜와 소스를 사용 :

SELECT [Coordinate], [Value] FROM Market 
WHERE MarketDataID = ? 
AND DataType = ? 
AND [Date] = ? 
AND [Source] = ? 
ORDER BY [coordinate] 
+2

SQL 서버의 버전이 어떤을 사용하고 있습니까? – sll

+1

어떤 RDBMS입니까? – Yuck

+12

당신이하려는 일에 대해 명확하지 않습니다. 단지 SQL 문을 "결합"할 수 없습니다. 달성하려는 결과물은 무엇입니까? –

답변

5
SELECT [Coordinate], [Value] 
    FROM Market AS m0 
    JOIN (SELECT TOP 1 m2.[Source], m2.[Date], m2.MarketDataID, m2.DataType 
      FROM Market AS m2 
     WHERE m2.MarketDataID = ? 
      AND m2.DataType = ? 
      AND m2.[Date] <= ? 
      ORDER BY m2.[Date] DESC, m2.[Source] 
     ) AS m1 
    ON m0.[Source]  = m1.[Source] 
    AND m0.[Date]  = m1.[Date] 
    AND m0.MarketDataID = m1.MarketDataID 
    AND m0.DataType  = m1.DataType 
ORDER BY [coordinate] 
+0

SQL Server 2005에서'join (select ...) '이 작동하는 한 이것이 될 것 같습니다. – AnotherParker

관련 문제