sql – 最佳方法来选择具有匹配条件的最新时间戳记的行

前端之家收集整理的这篇文章主要介绍了sql – 最佳方法来选择具有匹配条件的最新时间戳记的行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是经常出现的事情,我几乎停止思考,但我几乎肯定我不是最好的方法.

问题:假设你有下表

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

猜你在找的MsSQL相关文章