答案 0 :(得分:4)
您需要一个列来维护订单,标识或时间戳。然后你可以“按x desc选择top(1)order”来获得最新的。
答案 1 :(得分:3)
在您的数据库上创建一个优先级列,然后对其进行排序(以及您的身份):
CREATE TABLE myqueue(priority INT NOT NULL, id INT IDENTITY NOT NULL PRIMARY KEY, payload VARCHAR(200) NOT NULL)
CREATE INDEX ix_myqueue(priority, id)
INSERT
INTO myqueue (priority, payload)
VALUES (0, 'Regular message')
INSERT
INTO myqueue (priority, payload)
VALUES (1, 'Urgent message')
SELECT id, payload
FROM myqueue
ORDER BY priority DESC, id DESC
TOP 1
id | payload
2 | Urgent message
DELETE
FROM mytable
WHERE id = 2
SELECT payload
FROM myqueue
ORDER BY priority DESC, id DESC
TOP 1
id | payload
1 | Regular message
DELETE
FROM mytable
WHERE id = 1
答案 2 :(得分:0)
1)如果您将表格用作队列,那么您使用的工具就是错误的工具。表是固有无序数据集。这是因为
2)可以根据任何字段的值来排序行。这意味着您可以通过添加具有值的行(通常是ID)在中间“插入”某些内容,该值的值将先于表中的其他行。
为什么使用数据库表来执行此操作?您正在寻找优先级队列。如果您正在执行此操作是因为您希望在软件出现故障时正在处理的作业仍然存在,请考虑将所有项目及其优先级添加到表中,然后将其取出并将其插入到相应的优先级队列中。软件,将您的数据存储与调度机制分离。