加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

RANK()排名函数如何使用 可以做什么

发布时间:2023-05-06 11:07:45 所属栏目:MsSql教程 来源:
导读:这篇文章主要介绍“RANK()排名函数如何使用,能做什么”,有一些人在RANK()排名函数如何使用,能做什么的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大家解答有帮助,有这个方面学习

这篇文章主要介绍“RANK()排名函数如何使用,能做什么”,有一些人在RANK()排名函数如何使用,能做什么的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大家解答有帮助,有这个方面学习需要的朋友就继续往下看吧。

本文主要介绍了SQLServer RANK() 排名函数的使用,具体如下:

-- 例子表数据

SELECT * FROM test;

-- 统计分数

SELECT name,SUM(achievement) achievement FROM test GROUP BY name;

-- 按统计分数做排行

SELECT RANK() OVER( ORDER BY SUM(achievement) desc) 排行,name,SUM(achievement) achievement FROM test GROUP BY name;

求助问答存储过程使用:

USE [DB]

GO

/****** Object: StoredProcedure [dbo].[sp_TodayJoinUser] Script Date: 2021/1/26 14:45:24 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author: _Hey_Jude

-- Create date: 2021-01-26

-- Description: 获取今日发表帮助/回复的新用户

-- =============================================

CREATE PROCEDURE [dbo].[sp_TodayJoinUser]

@tableLevel int,

@date varchar(30)

AS

Declare @Sql nvarchar(max)

declare @minTabId int

declare @maxTabId int

declare @maxf_id int

declare @helpTableName nvarchar(max)

declare @tableCount int

BEGIN

--最小f_id所在表

set @minTabId=0

set @tableCount=@minTabId

--最大f_id所在表

set @maxf_id=(select MAX(F_ID) from [Table] where F_IsDelete=0)

set @maxTabId=@maxf_id/@tablelevel

set @helpTableName='SELECT UserID, Max([F_DateTime]) AS dt FROM [Table] GROUP BY UserID'

while @tableCount<=@maxTabId

begin

print @tableCount

set @helpTableName += ' UNION SELECT UserID, Max([DateTime]) as dt FROM SubTable'+cast(@tableCount as nvarchar(10))+' GROUP BY UserID '

set @tableCount=@tableCount+1

end

set @Sql='SELECT [nikename] FROM (

SELECT UserID, RANK() OVER(PARTITION BY UserID ORDER BY dt) AS Num,dt FROM ( '+@helpTableName+' ) AS T ) AS NewT

LEFT JOIN [UserTable] A WITH(NOLOCK) ON NewT.UserID = A.UserId WHERE Num = 1 AND dt > '''+@date+''''

Exec sp_executesql @Sql

END

 

GO

partition的意思是对数据进行分区,sql语句如下

SELECT* FROM (

SELECT

ROW_NUMBER() over(partition by [姓名] order by [打卡时间] desc) as rowNum,

[姓名],

[打卡时间]

FROM [dbo].[打卡记录表]

) temp

WHERE temp.rowNum = 1

通过 partition by [姓名] order by [打卡时间] desc,这句就可以做到,让数据按照姓名分组,并且在每组内部按照时间进行排序。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章