複数の優先順位を持つキューイング システムを実装しています。各優先度の少なくとも
Y 行
を含む X 行を返すことができるクエリが必要です。
例えば:
キューに 3 つの優先度 (高、中、低) があり、優先度ごとにそれぞれ 3、2、1 行が必要だとします。
テーブルが次のようになっている場合:
-----------------
| Id | Priority |
-----------------
| 1 | High |
| 2 | High |
| 3 | High |
| 4 | High |
| 5 | Medium |
| 6 | Medium |
| 7 | Low |
-----------------
結合された 3 つの単純なクエリは、(1、2、3、5、6、7) を返します。
SELECT TOP 3 Id FROM tbl WHERE Priority = 'High' UNION
SELECT TOP 2 Id FROM tbl WHERE Priority = 'Medium' UNION
SELECT TOP 1 Id FROM tbl WHERE Priority = 'Low'
ただし、テーブルに特定の優先度が十分に含まれていない場合、問題が発生します。
-----------------
| Id | Priority |
-----------------
| 1 | High |
| 2 | High |
| 3 | High |
| 4 | High |
| 5 | Medium |
| 6 | Low |
| 7 | Low |
-----------------
返してもらいたいです(1、2、3、4、5、6)。
ギャップを埋めるために最高の優先度を使用します (この場合、十分なメディアがないため、4 番目の高行を使用します)。
これに対応するクエリはありますか、それとも SQL レベルではなくアプリケーション内でフィルタリングする方がよいでしょうか?