编写SQL来查询优先级队列表

前端之家收集整理的这篇文章主要介绍了编写SQL来查询优先级队列表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在实现一个小队列来处理首先运行的进程.我在数据库中使用表来执行此操作.这是表的结构(我在sqlite中嘲笑它): @H_404_2@"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"identifier" VARCHAR NOT NULL,"priority_number" INTEGER DEFAULT 15,"timestamp" DATETIME DEFAULT CURRENT_TIMESTAMP,"description" VARCHAR

我正在尝试编写sql来为我提供下一个可以运行的进程.以下是一些示例数据:

@H_404_2@id identifier priority_number timestamp description 1 test1 15 2009-01-20 17:14:49 NULL 2 test2 15 2009-01-20 17:14:56 NULL 3 test3 10 2009-01-20 17:15:03 NULL 4 test4 15 2009-01-20 17:15:08 NULL 5 test5 15 2009-01-20 17:32:23 NULL 6 test6 14 2009-01-20 17:32:30 NULL 7 test7 7 2009-01-20 17:32:38 NULL 8 test8 20 2009-01-20 17:32:57 NULL 9 test9 7 2009-01-21 13:47:30 NULL 10 test10 15 2009-01-21 13:50:52 NULL

如果我使用这个sql,我可以按正确的顺序获取数据:

@H_404_2@select * from queue_manager order by priority_number,timestamp;

这将为我提供顶部具有最低优先级编号(最重要)的项目,并在这些优先级编号中,最早进入顶部的队列(按时间戳).

我可以运行这个查询,只占用第一行,但我宁愿用一个SQL查询来做这个,它会给我位于队列顶部的进程的一行(在上面的示例数据中,行id = 7).

我试过做自我加入和子查询,但我必须有一个心理障碍 – 我似乎无法做到正确.

提前致谢!

编辑

我忘了提到我正在寻找一个独立于数据库查询.我在sqlite中嘲笑这个,但我很有可能在DB2或Oracle中实现它.我曾想过在我的查询中使用“限制1”类型的运算符,但不同的数据库引擎之间有所不同.

解决方法

看看这是否有效: @H_404_2@select * from queue_manager where priority_number = (select min(priority_number) from queue_manager) and timestamp = (select min(timestamp) from queue_manager qm2 where qm2.priority_number = queue_manager.priority_number)

猜你在找的MsSQL相关文章