当前位置:  开发笔记 > 数据库 > 正文

选择具有与条件匹配的最新时间戳的行的最佳方法

如何解决《选择具有与条件匹配的最新时间戳的行的最佳方法》经验,为你挑选了1个好方法。

这是经常出现的事情,我几乎不再考虑它,但我几乎可以肯定,我不会这样做是最好的方式.

问题:假设您有下表

CREATE TABLE TEST_TABLE
(
  ID          INTEGER,
  TEST_VALUE  NUMBER,
  UPDATED     DATE,
  FOREIGN_KEY INTEGER
);

选择与FOREIGN_KEY = 10的最近更新的行关联的TEST_VALUE的最佳方法是什么?

编辑:让我们更有趣,因为下面的答案只是采用我的排序方法,然后选择顶行.不错,但对于大量退货,订单会扼杀性能.所以奖励积分:如何以可扩展的方式进行(即没有不必要的顺序).



1> Justin Cave..:

分析功能是你的朋友

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的东西,这可能行不通.这不再是一个庞大的人口,但总有一些人坚持旧版本.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有