从当前行取得上一行的数据

zhouboat 2017-10-13 04:31:22
表1
行号 姓名 性别
150 张三 男
100 王二 男
200 李四 女

已知当前行的姓名=李四,怎么取得最接近的数值的行(往小的方向,上例中为行号150)的姓名?
谢谢!
...全文
346 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
繁花尽流年 2017-10-13
  • 打赏
  • 举报
回复
2012版本以上的话直接用lag函数来取更方便
RINK_1 2017-10-13
  • 打赏
  • 举报
回复
select B.* from 表1 A CROSS APPLY (select top 1 * from 表1 where 行号<A.行号 order by 行号 desc) as B where 筛选条件
吉普赛的歌 2017-10-13
  • 打赏
  • 举报
回复
DECLARE @t TABLE (rowNum INT,[name] NVARCHAR(8),gender NCHAR(1))
INSERT INTO @t VALUES (150,N'张三',N'男')
INSERT INTO @t VALUES (100,N'王二',N'男')
INSERT INTO @t VALUES (200,N'李四',N'女') 

;WITH cte as (
	SELECT ROW_NUMBER() OVER (ORDER BY rowNum DESC) AS rid ,* FROM @t
)
SELECT TOP 1 rowNum,[name],gender 
FROM cte WHERE rowNum<(SELECT TOP 1 rowNum FROM cte b WHERE b.name=N'李四')
ORDER BY rowNum DESC
/*
rowNum	name	gender
150	    张三	男
*/
顺势而为1 2017-10-13
  • 打赏
  • 举报
回复


if object_id('tempdb..#Tmp_Data') is not null
					drop table #Tmp_Data

CREATE TABLE #Tmp_Data (
             Row_No  int ,
             Name nvarchar(10) ,
             Sex nvarchar(10))

INSERT INTO #Tmp_Data
Select 150,N'张三',N'男' union
Select 100,N'王二',N'男' union
Select 200,N'李四',N'女'


DECLARE @currRow_No int
SET @currRow_No=200

Select *
From #Tmp_Data
Where Row_No=(Select Max(Row_No)From #Tmp_Data Where Row_No<@currRow_No)

Row_No      Name       Sex
----------- ---------- ----------
150         张三         男

(1 row(s) affected)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧