问答

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

 来源    2019-02-16    1  

我正在实现一个小队列来处理首先运行的进程.我在数据库中使用表来执行此操作.这是表的结构(我在SQLite中嘲笑它):

        "id" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL ,
        "identifier" VARCHAR NOT NULL ,
        "priority_number" INTEGER DEFAULT 15,
        "timestamp" DATETIME DEFAULT CURRENT_TIMESTAMP,
        "description" VARCHAR

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

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,我可以按正确的顺序获取数据:

select * from queue_manager order by priority_number, timestamp;

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

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

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

提前致谢!

编辑

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

看看这是否有效:

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)
无法用RANK()函数编写sql查询
问答在我的应用程序中,我需要使用以下规则从数据库中检索最佳文件: >文件,具有最多的upvotes – 优先级1 >文件,具有最多注释 – 优先级2 如果只有文件没有upvotes且没有评论, ...
3
sql-server-2008 – 编写SQL查询的最佳方法,该查询检查列是否为非NULL值或NULL
问答我有一个SP,其参数具有NULL作为默认值,然后我想进行如下查询: SELECT ... FROM ... WHERE a.Blah = @Blah AND (a.VersionId = @Versi ...
1
编写SQL查询以查询和更新同一个表
问答我对SQL不是很友好所以我需要在表上编写SQL更新/删除查询.要求如下. 表A: Col1(PK)Col2 Col3数量 1 Code1        价值1 5 2 Code2 Value2 2 3 ...
1
SQL JOIN查询编写
问答我正在尝试编写一个涉及两个表的简单查询. "person"表具有唯一的person_id和名称,并且"friends"表具有person_id和friend_i ...
1
sql – 编写自联接查询?
问答我有下表的值 CREATE TABLE #tmpEmployee(ID int, EmpName varchar(50), EmpBossID int) insert into #tmpEmploye ...
2
mysql – 如何使用动态LIMIT编写SQL查询
问答SELECT * FROM用户LIMIT(SELECT group_limit FROM groups WHERE groupid = 7471);::这是从MySQL Database Knowle ...
2
mysql – 如何编写SQL查询来检测重复的主键?
问答假设我想要更改表,以便我的主键如下 user_id,round,tournament_id 目前我需要清理重复项.查找所有重复项的查询是什么? 这是针对MySQL的,我希望看到重复的行::从技术上讲, ...
1
sql – 如何编写一个选择查询或服务器端函数,它将从许多数据点生成一个整洁的时间流图?
问答注意:我使用的是图形数据库(OrientDB是特定的).这使我可以自由地在javascript或groovy中编写服务器端函数,而不是将自己限制为SQL以解决此问题.* 注2:由于这是一个图形数据库, ...
1
sql-server-2008 – 如何使用SQL Server 2008为特定日期范围和日期时间编写Sql查询?
问答我需要编写一个查询来获取指定日期范围和时间范围之间的所有行. 例如,我想查询2010年9月16日5:00到2010年9月21日9:00的所有行. 关于查询应该如何的任何想法? 预先感谢您的任何帮助!: ...
1
学习编写复杂报告查询的最佳在线SQL教程是什么?
问答我的SQL技能相当有限,因为我发现自己最近使用的是DB(Oracle),我想超越基本的select语句. 我想编写查询来执行诸如从多个表中获取数据,总和数量,比较日期,组,过滤器等. 您可以推荐哪些网 ...
1
在c#代码中编写SQL查询的最佳实践是什么?
问答在我目前的项目中,我正在使用SQL CE.由于它不支持存储过程,我必须在存储库中编写sql查询. 选项1: StringBuilder query = new StringBuilder(); que ...
2
寻找在Oracle中使用相同子查询两次时编写SQL的最佳实践
问答我在Oracle中编写SQL.在SQL中,我使用了两次相同的子查询.我正在尝试找到替换此类常见子查询或重用的查询的最佳方法. 我正在考虑为子查询创建一个视图,但我不允许这样做.全局临时表可能是其他解决 ...
1
如何编写SQL查询以识别特定字段中的重复值?
问答这是我正在使用的表格: 我想仅识别具有不同参数的重复扣减ID的ReviewID. 例如,在上图中,ReviewID 114具有两个不同的参数ID,但两个记录具有相同的扣除ID. 就我的目的而言,此记录 ...
1
c# – 如何将此Linq SQL编写为动态查询(使用字符串)?
问答根据需要跳到"特定问题".一些背景: 场景:我有一组产品,其中包含一个填充了DDL的"向下钻取"过滤器(查询对象).每个渐进式DDL选择将进一步限制产品列表以及 ...
1
sql – 有没有更好的方法来编写基于子查询删除记录的查询?
问答我有这个问题: DELETE from MailingListTable where Md5Hash in ( SELECT dbo.ListItems.Md5Hash FROM dbo.Lists ...
1
与在执行SQL任务中编写sql查询相比,SSIS中的DataFlow任务非常慢
问答我是SSIS的新手并且有一对问题 >我想在同一个数据库中将1,25,000行从一个表传输到另一个表.但是当我使用数据流任务时,它需要花费太多时间.我尝试使用ADO NET目标以及OLE DB目标 ...
1
mysql – 编写SQL查询以查找至少出现三次的所有数字
问答我正在练习SQL语言并得到一个类似的问题: 编写SQL查询以查找连续出现至少三次的所有数字. +----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 ...
1
sql-server – 我可以为Microsoft SQL企业管理器编写一个更改查询窗口背景的插件
问答我是否可以为Microsoft SQL企业管理器编写一个插件,如果查询窗口指向生产数据库,它会更改查询窗口背景?::不,企业管理器没有可供您使用的插件框架.
1
ruby-on-rails – 在rails中直接编写SQL查询是一个好习惯吗?
问答我正在使用非常庞大的数据和多个连接创建一个应用程序.立即在rails中使用完整的sql字符串是不好的做法?在rails中编写完整的sql查询有什么缺点?::如果你在不了解替代方案的情况下这样做,这是唯 ...
1