日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

SQLServer?RANK()?排名函數(shù)的使用_MsSql

作者:_Hey_Jude ? 更新時(shí)間: 2022-05-24 編程語(yǔ)言

本文主要介紹了SQLServer RANK() 排名函數(shù)的使用,具體如下:

-- 例子表數(shù)據(jù)
SELECT * FROM test;
-- 統(tǒng)計(jì)分?jǐn)?shù)
SELECT name,SUM(achievement) achievement FROM test GROUP BY name; 
-- 按統(tǒng)計(jì)分?jǐn)?shù)做排行
SELECT RANK() OVER( ORDER BY SUM(achievement) desc) 排行,name,SUM(achievement) achievement FROM test GROUP BY name;

求助問(wèn)答存儲(chǔ)過(guò)程使用:

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:	獲取今日發(fā)表幫助/回復(fù)的新用戶
-- =============================================
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的意思是對(duì)數(shù)據(jù)進(jìn)行分區(qū),sql語(yǔ)句如下

SELECT* FROM (
    SELECT
        ROW_NUMBER() over(partition by [姓名] order by [打卡時(shí)間] desc) as rowNum,
        [姓名],
        [打卡時(shí)間]
    FROM [dbo].[打卡記錄表]
    ) temp
WHERE temp.rowNum = 1

通過(guò)?partition by [姓名] order by [打卡時(shí)間] desc,這句就可以做到,讓數(shù)據(jù)按照姓名分組,并且在每組內(nèi)部按照時(shí)間進(jìn)行排序

原文鏈接:https://blog.csdn.net/stupid_leilei/article/details/123522074

欄目分類
最近更新