SQL Server 2012如何检索特定记录的序号位置
SQL Server 2012 how to retrieve ordinal position of specific record
我有一个包含以下列和示例数据的 table,其中 ItemID
是唯一的:
ID User ItemID ExpiryDate
1 John A13534 2015-12-24
3 Mark B14532 2015-12-13
.......
12415 John B43245 2012-12-30
.......
75741 John C14542 2012-12-22
.......
过滤器是:
WHERE User = 'John'
AND ExpiryDate > getDate()
ORDER BY
ExpiryDate DESC
考虑到 ItemID
是唯一的,我需要确定 itemID = B43245
是否在前 1000 个选定项目中
我尝试用 Row_Number
和 RANK
编写解决方案,但我不知道将 ItemID
的过滤器放在哪里 :-(
考虑到 table 包含超过 100.000 个项目,您能否提出一个不太重的解决方案?
谢谢!
您可以简单地获取前1000条记录,然后获取您的id。拿到记录的话,这个id在top 1000之内,如果没有,那就不是。或者,如果您愿意,可以将外部 select 更改为计数。
select * from
(
select top 1000 ID
from yourtable
WHERE User='John' AND ExpiryDate > getDate()
ORDER BY ExpiryDate DESC
) x
where id = 'B43245'
我有一个包含以下列和示例数据的 table,其中 ItemID
是唯一的:
ID User ItemID ExpiryDate
1 John A13534 2015-12-24
3 Mark B14532 2015-12-13
.......
12415 John B43245 2012-12-30
.......
75741 John C14542 2012-12-22
.......
过滤器是:
WHERE User = 'John'
AND ExpiryDate > getDate()
ORDER BY
ExpiryDate DESC
考虑到 ItemID
是唯一的,我需要确定 itemID = B43245
是否在前 1000 个选定项目中
我尝试用 Row_Number
和 RANK
编写解决方案,但我不知道将 ItemID
的过滤器放在哪里 :-(
考虑到 table 包含超过 100.000 个项目,您能否提出一个不太重的解决方案?
谢谢!
您可以简单地获取前1000条记录,然后获取您的id。拿到记录的话,这个id在top 1000之内,如果没有,那就不是。或者,如果您愿意,可以将外部 select 更改为计数。
select * from
(
select top 1000 ID
from yourtable
WHERE User='John' AND ExpiryDate > getDate()
ORDER BY ExpiryDate DESC
) x
where id = 'B43245'