gpt4 book ai didi

sql - 编制SQL查询优先级队列表

转载 作者:行者123 更新时间:2023-12-04 13:25:15 24 4
gpt4 key购买 nike

我正在实现一个小的队列,以处理首先运行哪个进程。我正在使用数据库中的表来执行此操作。这是表的结构(我在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)

关于sql - 编制SQL查询优先级队列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/465692/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com