Сравните столбец внутреннего запроса выбора - PullRequest
0 голосов
/ 08 сентября 2011

Предположим, я получаю следующую таблицу из запроса.

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.В приведенной выше таблице я получу результат.

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'.

Может ли какой-либо орган предложить мне решение или любую другую альтернативу для выполнения этой задачи.

1 Ответ

3 голосов
/ 08 сентября 2011

c это не таблица или представление, это производная таблица. Вы не можете использовать это так. Если вы хотите использовать повторно, посмотрите общие выражения таблиц. А что не так с 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; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...