在此处使用 Oracle 11g。
我试图弄清楚如何针对下面的示例表编写特定查询:
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,按优先级和日期排序。
在上述情况下,语句应该返回1 Q或3 Q,但不能同时返回,因为它们具有相同的优先级和日期。如果 3 Q 设置为 STATUS='DONE',则查询应返回 1 Q。
对于第二步,我将把这些数据重新加入到表中,以获取我想要处理的集合的行(例如:1 Q)。这不必是一个两步的过程。如果我可以在没有理想连接的情况下获取要处理的行集。
我希望我只是错过了一些非常简单的东西,但如果需要,我愿意使用分析函数进行分区。