SQL Server 2012如何检索特定记录的序号位置

时间:2015-12-11 03:28:53

标签: tsql sql-server-2012 ordinals

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

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

谢谢!

1 个答案:

答案 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'