2011-09-08 85 views
0

让我们假设我从查询中获取下面的表。比较内部选择查询的列

2011-08-09 16:43:37.160 020102100037 74.9900 
2011-08-09 16:43:37.177 020102100038 74.9900 
2011-09-07 16:48:57.823 020102100037 75.9900 
2011-09-07 16:48:57.823 020102100038 75.9900 
2011-09-07 16:49:19.000 020102100037 80.0000 
2011-09-07 16:49:19.000 020102100038 80.0000 

QUERY

SELECT productcode, price FROM ( 
    inner select statement) AS t 

现在我想代码(第2列),其上面的表格最大date.In我应得到的结果。

2011-08-09 16:43:37.160 020102100037 74.9900 
2011-08-09 16:43:37.177 020102100038 74.9900 

所以我想这个查询。

SELECT productcode, price FROM (
    SELECT productcode, price FROM ( 
     inner select statement) AS c 
    WHERE date = 
     (SELECT MAX(cast(date as datetime)) 
     FROM c WHERE productcode = c.productcode 

但我得到的错误

无效对象名 'C'。

任何机构可以建议我的解决方案或任何其他替代方案来执行此任务。

回答

3

c不是表或视图,它是派生表。你不能像那样重复使用它。如果您想要重复使用,请查找通用表格表达式。 GROUP BYSELECT TOP 1ROW_NUMBER有什么问题吗?它们通常用于解决这些问题。

WITH cteProducts 
    AS (SELECT ProductDate 
       , ProductCode 
       , ProductPrice 
       , ROW_NUMBER() OVER (PARTITION BY ProductCode ORDER BY ProductDate DESC) RowNumber 
      FROM Products) 
SELECT * 
    FROM cteProducts 
WHERE RowNumber = 1;