Sql server 2005 比较内部选择查询的列
假设我从查询中得到下表Sql server 2005 比较内部选择查询的列,sql-server-2005,tsql,select,Sql Server 2005,Tsql,Select,假设我从查询中得到下表 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.000
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
查询
SELECT productcode, price FROM (
inner select statement ) AS t
现在我想得到具有最大日期的代码(第二列)。在上表中,我将得到结果
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”无效。
任何机构都可以向我推荐执行此任务的解决方案或任何其他替代方案。
c
不是表或视图,而是派生表。你不能那样重复使用它。如果要重用,请查找通用表表达式。那么分组依据
,或者选择前1名
或者行数
有什么问题?它们通常被用来解决这些问题
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;
c
不是表或视图,而是派生表。你不能那样重复使用它。如果要重用,请查找通用表表达式。那么分组依据
,或者选择前1名
或者行数
有什么问题?它们通常被用来解决这些问题
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;