2012-01-11 139 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