我有一个表格,其中包含问题报告 (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。