SQL Server:获取表中记录的位置(序数)

时间:2010-11-19 16:03:24

标签: sql-server-2008 sql

我有一个存储任务队列的表。每项任务都如下:

Id | Operation | Argument | Status

操作是字符串
参数是单个数字 状态为以下之一:QueuedBusyCompleteFailed

我需要弄清楚队列中某个项目的位置,但需要跳过未排队的任务。

示例:

1 A 5 Queued   -- 1
2 A 6 Queued   -- 2
3 B 3 Busy     -- x
4 B 4 Complete -- x
5 A 8 Queued   -- 3

--位置x之后的预期位置意味着请求毫无意义。

问题:计算这种位置的好方法是什么?
目前我这样做:

SELECT TOP 1 p.Position FROM
(
    SELECT Id, Status, 
    ROW_NUMBER() over (order by Id) as Position 
    from QueuedJobs where Status = 0 AND Id <= @taskId
) as p
order by Position desc

英文:根据我的任务计算每项任务的位置,并给我最后的位置(这是我的任务)

我关注的是表现,假设我有1000条记录并且有很多请求(每秒100次) 数据库是SQL Server 2008

2 个答案:

答案 0 :(得分:1)

没有order by子句的查询可以按任何顺序返回行。使用什么标准来排序不忙或已完成的排队请求?它是FIFO队列吗?最老的请求是在顶部?通常,日期时间值用于此目的。在任何情况下,我都会按照前端查询返回的顺序对行进行编号,这样可以更有效地完成。

答案 1 :(得分:0)

如果状态0表示“已排队”,则:

Select Count(*)
From QueuedJobs
Where Status = 0
  and Id <= @taskId

应该告诉你你在哪里:)