Sql 多个列的Distinct和order by
这是我的查询结果 我正在尝试使用不同的和多个顺序。也许我说不出来。但我的第一个按参数排序的顺序是priority1列,第二个按参数排序的顺序是具有不同Sid的点。所以, 对我来说最重要的专栏是priorty1 第二个最重要的列点 但每个sid将显示一次 我想要什么 我想要Id是7,因为在Id为1509的那些中,优先级1是最大的。 我希望Id是9,因为在Id为1510的项目中,点是最大的。 在这里阅读更多 我猜你说的“不同”只是指一个值,所以它是分组的基础 更新 从 在这里阅读更多 我猜你说的“不同”只是指一个值,所以它是分组的基础 更新 从 在这里,您可以使用Row_number函数为结果集指定排名或Row_顺序:Sql 多个列的Distinct和order by,sql,sql-server,tsql,sql-order-by,row-number,Sql,Sql Server,Tsql,Sql Order By,Row Number,这是我的查询结果 我正在尝试使用不同的和多个顺序。也许我说不出来。但我的第一个按参数排序的顺序是priority1列,第二个按参数排序的顺序是具有不同Sid的点。所以, 对我来说最重要的专栏是priorty1 第二个最重要的列点 但每个sid将显示一次 我想要什么 我想要Id是7,因为在Id为1509的那些中,优先级1是最大的。 我希望Id是9,因为在Id为1510的项目中,点是最大的。 在这里阅读更多 我猜你说的“不同”只是指一个值,所以它是分组的基础 更新 从 在这里阅读更多 我猜你说
SELECT *
FROM
(
SELECT ID,
[Sid],
[Point],
[priority1],
JoinDate,
Title,
Content,
ROW_NUMBER() OVER(PARTITION BY [Sid] ORDER BY [priority1] desc, [Point] desc) AS RN
FROM <your_resultset>
) a where a.RN = 1;
结果:
在这里,您可以使用Row_number函数为结果集指定排名或Row_顺序:
SELECT *
FROM
(
SELECT ID,
[Sid],
[Point],
[priority1],
JoinDate,
Title,
Content,
ROW_NUMBER() OVER(PARTITION BY [Sid] ORDER BY [priority1] desc, [Point] desc) AS RN
FROM <your_resultset>
) a where a.RN = 1;
结果:
您可以使用cte和row_编号获得所需结果,如下所示
WITH cte as
(SELECT t1.*, ROW_NUMBER() over(PARTITION BY sid
ORDER BY priority DESC, point DESC) AS rn
FROM table1 t1)
SELECT id,
sid,
point,
priority --- and other columns
FROM cte
WHERE rn = 1
结果:
您可以查看演示您可以使用cte和row_编号获得所需的结果,如下所示
WITH cte as
(SELECT t1.*, ROW_NUMBER() over(PARTITION BY sid
ORDER BY priority DESC, point DESC) AS rn
FROM table1 t1)
SELECT id,
sid,
point,
priority --- and other columns
FROM cte
WHERE rn = 1
结果:
您可以查看演示我可以在Mssql中使用密集等级吗?但可能是我的SQL Server语法错误是的,您的语法错误。你还有其他想法吗?再一次尝试表达我可以在Mssql中使用稠密等级吗?但可能是我的SQL Server语法错误是的,您的语法错误。你还有别的想法吗?再一次尝试表达对这个答案的感谢!今天帮了很多忙。谢谢你的回答!今天帮了很多忙。
id sid point priority
---------------------------
7 1509 10 3
9 1510 45 2