Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 获取具有最大值(列)的行作为distinct键_Sql_Sql Server 2008 - Fatal编程技术网

Sql 获取具有最大值(列)的行作为distinct键

Sql 获取具有最大值(列)的行作为distinct键,sql,sql-server-2008,Sql,Sql Server 2008,我有一些数据,比如 code amount month aaa1 100 1 aaa1 200 2 aaa1 300 3 aaa4 450 2 aaa4 400 3 aaa6 0 2 从上面可以看出,对于每一个代码,我希望得到max(month)的行 如何为此创建ms sql查询?您可以使用with按代码顺序分区按月描述来执行此操作: WITH CTE AS ( SELECT co

我有一些数据,比如

code    amount  month
aaa1    100     1
aaa1    200     2
aaa1    300     3
aaa4    450     2
aaa4    400     3
aaa6    0       2
从上面可以看出,对于每一个代码,我希望得到max(month)的行

如何为此创建ms sql查询?

您可以使用with
按代码顺序分区按月描述来执行此操作:

WITH CTE
AS
(
   SELECT 
     code, amount, month,
     ROW_NUMBER() OVER(PARTITION BY code 
                       ORDER BY month DESC) AS RN
   FROM Tablename
)
SELECT code, amount, month
FROM CTE
WHERE RN = 1;
这将为您提供每个
code
的最大
month

您可以使用with
按代码顺序按月分区DESC
来执行此操作:

WITH CTE
AS
(
   SELECT 
     code, amount, month,
     ROW_NUMBER() OVER(PARTITION BY code 
                       ORDER BY month DESC) AS RN
   FROM Tablename
)
SELECT code, amount, month
FROM CTE
WHERE RN = 1;
这将为您提供每个
code
的最大
month

试试这个

SELECT * 
FROM 
  (SELECT MAX(MONTH) month, code
  FROM table1
  GROUP BY code) res
JOIN table1
ON res.month = table1.month 
AND res.code = table1.code
这是你的建议试试这个

SELECT * 
FROM 
  (SELECT MAX(MONTH) month, code
  FROM table1
  GROUP BY code) res
JOIN table1
ON res.month = table1.month 
AND res.code = table1.code

这是

为什么在WITH前面有分号?python sqlite的语法是否相同?@user3358205来自MSDN的备注部分,它说:当CTE用于作为批处理一部分的语句时,它前面的语句后面必须跟一个分号。@user3358205当
WITH
是语句中的第一个单词时,实际上不需要分号,但在它前面加上分号可以确保在前面有任何其他语句时,它将被终止。需要明确的是,分号不应该是定义CTE的第一个字符,而应该是上一条语句的最后一个字符(终止符)。@user3358205首先使用它只是一个故障保护。为什么WITH前面有分号?python sqlite的语法是否相同?@user3358205来自MSDN的备注部分,它说:当CTE用于作为批处理一部分的语句时,它前面的语句后面必须跟一个分号。@user3358205当
WITH
是语句中的第一个单词时,实际上不需要分号,但在它前面加上分号可以确保在前面有任何其他语句时,它将被终止。为了清楚起见,分号不应该是定义CTE的第一个字符,而应该是上一条语句的最后一个字符(终止符)。@user3358205将其放在第一位只是一个故障保护。