2012-01-11 145 views
0

SQL Server 2005.表架構是MarketdataID,數據類型,日期,源,座標,值。除了價值之外,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 Server版本您使用哪一個? – sll 2012-01-11 14:28:10

+1

哪個RDBMS是這個? – Yuck 2012-01-11 14:28:22

+12

不清楚你想要做什麼 - 你不能只是「結合」sql語句。你想要達到什麼輸出? – 2012-01-11 14:28:34

回答

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

我認爲這可能是,只要'join(select ...)'在SQL Server 2005中有效。 – AnotherParker 2012-01-11 14:40:59