次のような問題レポート(PR)の割り当てを保持するテーブルがあります。
TABLE "ALLOCATIONS"
ALLOCATIONID PRID DATEALLOCATED ENG_ID
1 401 20-SEP-06 10.48.00 1
2 401 20-SEP-06 10.48.00 2
3 401 20-SEP-06 10.48.00 2
4 402 20-SEP-06 12.35.00 1
5 402 20-SEP-06 12.43.00 1
6 402 20-SEP-06 13.43.00 2
7 700 14-OCT-12 13.30.05 1
8 700 14-OCT-12 13.30.35 2
9 700 14-OCT-12 14.30.35 2
最新の割り当てにより、PRが現在割り当てられているエンジニアが決まります。たとえば、エンジニア2に割り当てられているすべてのPRを検索したいと思います。そこで、各PRIDの最新の割り当てを探し、ENG_IDを確認し、ENG_IDが正しい場合はこのテーブルから情報を引き出します。
この表には、実際のPRの説明(およびわかりやすくするためにここでは省略されているその他の情報)が含まれています。
TABLE "PROBLEMS"
PRID TITLE
401 Something
402 Something
700 Something
これを行うために、次のようにDATEALLOCATEDフィールドを使用しました。
SELECT PRID, TITLE FROM PROBLEMS p WHERE p.PRID IN
(
SELECT GROUPEDALLOC.PRID FROM allocations alloc INNER JOIN
(
SELECT PRID, MAX(DATEALLOCATED) AS MaxAllocationDate
FROM allocations
GROUP BY PRID
)
groupedAlloc ON alloc.PRID = groupedAlloc.PRID
AND ALLOC.DATEALLOCATED = groupedAlloc.MaxAllocationDate
AND ENG_ID = 2
)
ORDER BY PRID DESC;
これで、秒を含む長い日付形式で挿入された上記のレコード7、8、9で正常に機能しますが、秒をログに記録しなかった古いレコードでは、これは明らかに機能しません。これらのレコードについては、allocationIDにフォールバックしたいと思います(これは明らかにシーケンシャルである場合とそうでない場合がありますが、これは最後の手段であり、何もないよりはましです)。
私の質問は、DATEALLOCATEDでこの追加の条件を実行するようにクエリを変更して(特定のPRIDですべてが等しいかどうかを確認したいだけです)、代わりにALLOCATIONIDを使用するにはどうすればよいですか?
OracleXEを使用していますが、可能であれば標準SQLを使用したいと考えています。