2011-09-08 2 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 

지금 내가 결과를 얻을 것이다 테이블 위의 최대 date.In을 가진 (2 열) 코드를 얻으려면.

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은 표 또는보기가 아니며 파생 테이블입니다. 그렇게 재사용 할 수는 없습니다. 재사용을 원하면 Common Table Expressions를 찾아보십시오. 그리고 GROUP BY, 또는 SELECT TOP 1 또는 ROW_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;