这是经常出现的事情,我几乎不再考虑它,但我几乎可以肯定,我不会这样做是最好的方式.
问题:假设您有下表
CREATE TABLE TEST_TABLE ( ID INTEGER, TEST_VALUE NUMBER, UPDATED DATE, FOREIGN_KEY INTEGER );
选择与FOREIGN_KEY = 10的最近更新的行关联的TEST_VALUE的最佳方法是什么?
编辑:让我们更有趣,因为下面的答案只是采用我的排序方法,然后选择顶行.不错,但对于大量退货,订单会扼杀性能.所以奖励积分:如何以可扩展的方式进行(即没有不必要的顺序).
分析功能是你的朋友
SQL> select * from test_table; ID TEST_VALUE UPDATED FOREIGN_KEY ---------- ---------- --------- ----------- 1 10 12-NOV-08 10 2 20 11-NOV-08 10 SQL> ed Wrote file afiedt.buf 1* select * from test_table SQL> ed Wrote file afiedt.buf 1 select max( test_value ) keep (dense_rank last order by updated) 2 from test_table 3* where foreign_key = 10 SQL> / MAX(TEST_VALUE)KEEP(DENSE_RANKLASTORDERBYUPDATED) ------------------------------------------------- 10
您还可以扩展它以获取整行的信息
SQL> ed Wrote file afiedt.buf 1 select max( id ) keep (dense_rank last order by updated) id, 2 max( test_value ) keep (dense_rank last order by updated) test_value , 3 max( updated) keep (dense_rank last order by updated) updated 4 from test_table 5* where foreign_key = 10 SQL> / ID TEST_VALUE UPDATED ---------- ---------- --------- 1 10 12-NOV-08
分析方法通常非常有效.
我还应该指出,分析函数是相对较新的,所以如果你使用的是早于9.0.1的东西,这可能行不通.这不再是一个庞大的人口,但总有一些人坚持旧版本.