我有一个包含以下列和示例数据的表,其中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
的过滤器放在哪里: - (
考虑到该表包含超过100.000项,您能否建议一个不太重的解决方案?
谢谢!
答案 0 :(得分:1)
您只需获取前1000条记录,然后获取您的ID即可。如果你得到一个记录,这个id在前1000名之内。如果你没有,那就不是。或者,如果您愿意,可以将外部选择更改为计数。
select * from
(
select top 1000 ID
from yourtable
WHERE User='John' AND ExpiryDate > getDate()
ORDER BY ExpiryDate DESC
) x
where id = 'B43245'