假设我从查询中获取以下表格。
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列)。在上表中我将得到结果。
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”。
任何机构都可以向我建议解决方案或任何其他替代方案来执行此任务。
答案 0 :(得分: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;