获取resultset sql server中的记录行数

Cav*_*rob 2 sql t-sql sql-server

我有一个包含序列号的文件表 - 列:

  • docid int
  • 写文本
  • submissionDate datetime

...而且我想知道特定序列号在针对表的查询中的位置.

例如,如果我通过submissionDate asc命令结果集,我可能想知道文档34在该排序中的位置(即它在位置11?)

我该怎么做呢?

OMG*_*ies 5

SQL Server 2005+,使用分析函数:

SELECT t.docid,
       t.writing,
       t.submissiondate,
       ROW_NUMBER() OVER(ORDER BY t.submissiondate) AS position
  FROM YOUR_TABLE t
Run Code Online (Sandbox Code Playgroud)

非分析版本

这种方法存在非连续值的风险,因为如果有两个(或更多)具有相同submissiondate值的记录- 它们都将具有相同的位置值.它与使用RANK或DENSE_RANK分析函数相同,因为ROW_NUMBER将始终为每条记录授予唯一值,而不考虑重复值.

SELECT x.docid,
       x.writing,
       x.submissiondate,
       (SELECT COUNT(*)
          FROM YOUR_TABLE y
         WHERE y.submissiondate <= x.submissiondate) AS position
  FROM YOUR_TABLE x
Run Code Online (Sandbox Code Playgroud)