ここでOracle11gを使用します。
以下のサンプルテーブルに対して特定のクエリを作成する方法を理解しようとしています。
ID TYPE PRIORITY STATUS DATE
----------------------------------------------------
1 Q A NEW 01-OCT-2009
1 Q A NEW 01-OCT-2009
1 Q A NEW 01-OCT-2009
1 Q A NEW 01-OCT-2009
1 Q A NEW 01-OCT-2009
1 Q A NEW 01-OCT-2009
1 Q A NEW 01-OCT-2009
1 Q A NEW 01-OCT-2009
2 R B NEW 01-OCT-2009
2 R B NEW 01-OCT-2009
2 R B NEW 01-OCT-2009
2 R B NEW 01-OCT-2009
3 R A NEW 01-OCT-2009
3 Q A NEW 01-OCT-2009
3 Q A NEW 01-OCT-2009
これが、クエリに実行させたいことの疑似PL/SQLです。
SELECT ID, TYPE
FROM DATA_TABLE
WHERE ROWNUM = 1 AND STATUS = 'NEW'
GROUP BY ID, TYPE
ORDER BY PRIORITY, DATE
IDの次のグループであるTYPEを取得したいのですが、ステータスはNEWで、優先度と日付の順に並べられています。
上記の場合、ステートメントは1Qまたは3Qのいずれかを返す必要がありますが、優先度と日付が同じであるため、両方を返すことはできません。3QがSTATUS='DONE'に設定されている場合、クエリは1Qを返す必要があります。
2番目のステップでは、このデータをテーブルに結合して、処理するセットの行を取得します(例:1Q)。これは2段階のプロセスである必要はありません。結合せずに処理する行のセットを取得できれば、それは理想的です。
本当に単純なものが欠けていることを願っていますが、必要に応じて、パーティション化に分析関数を使用することもできます。