开窗函数 Row_Number partition by 分类排序

背景, 目前在维护老项目, 但其中有bug.

原先的逻辑在对某个数据的分类编号时不对,导致结果不准确.


解决方案: 用开窗函数 row_number partition by 某个被分类的数据字段, 然后 针对时间戳做个排序


因为在办公室不方便弄, 只好回家自己凭记忆,把主要的点列出来.

以下是主要的表结构:

 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tblFeed]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[tblFeed](
	[key] [uniqueidentifier] NOT NULL CONSTRAINT [DF_tblFeed_key]  DEFAULT (newid()),
	[type] [int] NULL,
	[content] [varchar](1000) NULL,
	[createdStamp] [datetime] NOT NULL CONSTRAINT [DF_tblFeed_createdStamp]  DEFAULT (getdate()),
	[lastUpdatedStamp] [datetime] NOT NULL CONSTRAINT [DF_tblFeed_lastUpdatedStamp]  DEFAULT (getdate()),
	[parentkey] [uniqueidentifier] NULL,
	[ownerkey] [uniqueidentifier] NULL,
	[state] [int] NULL
) ON [PRIMARY]
END

主要涉及查询的sql脚本为:

SELECT a.* into #tmpFeed FROM tblFeed a
inner join tblFeed b
	on a.[parentkey]=b.[key]
    and a.ownerKey='B588D659-CF0F-4A28-AD2B-3D9B9FAFC357'
    and b.ownerkey='B588D659-CF0F-4A28-AD2B-3D9B9FAFC357'
    and a.type=1
    and b.type=0

 --select * from #tmpFeed
 -- alter table #tmpFeed add RowNumber int
 -- alter table #tmpFeed drop column RowNumber  


declare @EachCommentCount int
set @EachCommentCount=3

select * from
(
	SELECT *, Row_Number() 
    OVER (partition by parentkey ORDER BY lastupdatedstamp desc) EachCommentIndex 
	FROM #tmpFeed
) a
where EachCommentIndex <= @EachCommentCount

drop table #tmpFeed


初始化数据截图:


查询结果截图:


请看上图的EachCommentIndex


(结束)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值