0

我有一个包含以下列和示例数据的表,其中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_Numberand编写解决方案,RANK但我不明白将过滤器放在哪里ItemID:-(

考虑到该表包含超过 100.000 个项目,您能否建议一个不太重的解决方案?

谢谢!

4

1 回答 1

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'
于 2015-12-11T03:47:02.857 回答