sql – 最佳方法来选择具有匹配条件的最新时间戳记的行
发布时间:2020-12-12 16:45:41 所属栏目:MsSql教程 来源:网络整理
导读:这是经常出现的事情,我几乎停止思考,但我几乎肯定我不是最好的方法. 问题:假设你有下表 CREATE TABLE TEST_TABLE( ID INTEGER,TEST_VALUE NUMBER,UPDATED DATE,FOREIGN_KEY INTEGER); 选择与FOREIGN_KEY = 10的最近更新的行相关联的TEST_VALUE的最佳方式是什
这是经常出现的事情,我几乎停止思考,但我几乎肯定我不是最好的方法.
问题:假设你有下表 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的东西上,这可能无效.这不是一个巨大的人口,但总是有一些人坚持旧版本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |