どのプロセスが最初に実行されるかを処理するために小さなキューを実装しています。これを行うために、データベース内のテーブルを使用しています。テーブルの構造は次のとおりです (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;
これにより、優先度番号が最も低い (最も重要な) アイテムが一番上に表示され、それらの優先度番号の中で (タイムスタンプによって) 最も早くキューに入れられたアイテムが一番上に表示されます。
このクエリを実行して最初の行のみを取得することもできますが、キューの先頭にあるプロセスの 1 行を取得する SQL クエリを使用して実行したいと思います (上記の例のデータでは、行id=7)。
自己結合とサブクエリを実行しようとしましたが、メンタルブロックが発生しているに違いありません-正しく取得できないようです.
前もって感謝します!
編集
データベースに依存しないクエリを探していることを忘れていました。私はこれを SQlite でモックアップしていますが、これを DB2 または Oracle で実装する可能性は十分にあります。クエリで "limit 1" タイプの演算子を使用することを考えていましたが、それはデータベース エンジンによって異なります。