Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 比较内部选择查询的列_Sql Server 2005_Tsql_Select - Fatal编程技术网

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;