2011-09-08 82 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;