如何获取Oracle表的最后一行

时间:2012-09-11 21:48:39

标签: sql oracle oracle11g

我想获得最后一行,我将其插入到Oracle 11g Express数据库的表中。 我怎么能这样做?

7 个答案:

答案 0 :(得分:45)

表中没有“last”行,因为Oracle表没有顺序概念。

但是,假设您想要找到最后插入的主键,这个主键是递增的数字,您可以这样做:

select *
  from ( select a.*, max(pk) over () as max_pk
           from my_table a
                )
 where pk = max_pk

如果您拥有创建每一行的日期,那么如果该列名为created,则会成为该行:

select *
  from ( select a.*, max(created) over () as max_created
           from my_table a
                )
 where created = max_created

或者,您可以使用聚合查询,例如:

select *
  from my_table
 where pk = ( select max(pk) from my_table )

这里有一点SQL Fiddle来演示。

答案 1 :(得分:18)

SELECT * FROM (
    SELECT * FROM table_name ORDER BY sortable_column DESC
) WHERE ROWNUM = 1;

答案 2 :(得分:3)

根据复合键K(k1,...,kn)的严格总顺序的最后一行:

SELECT  *
FROM    TableX AS o
WHERE   NOT EXISTS (
            SELECT  *
            FROM    TableX AS i
            WHERE   i.k1 > o.k1
                OR  (i.k1 = o.k1 AND i.k2 > o.k2)
                ...
                OR  (i.k1 = o.k1 AND i.k2 = o.k2 AND i.k3 = o.k3 AND ... AND i.kn > o.kn)
        )
;

鉴于K很简单(即不是复合)的特殊情况,上述内容缩短为:

SELECT  *
FROM    TableX AS o
WHERE   NOT EXISTS (
            SELECT  *
            FROM    TableX AS i
            WHERE   i.k1 > o.k1
        )
;

请注意,对于此查询只返回一行,键必须没有绑定。如果允许绑定,则此查询将返回与最大键绑定的所有行。

答案 3 :(得分:3)

select * from table_name ORDER BY primary_id DESC FETCH FIRST 1 ROWS ONLY;

那是不执行子查询的最简单的方法

答案 4 :(得分:1)

你可以这样做:

y<-rnorm(100)
x<-rnorm(100)
m.test<-lm(y ~ x) 

n<-100
res<-m.test$residuals
rss<-sum(res^2) 
k<-3; df<-n-k; w<-rep(1,N) #params, dfs, weights
ll<-0.5 * (sum(log(w)) - n *
             (log(2 * pi) + 1 - log(n) + log(sum(w * res^2))))
ll.stats<-logLik(m.test)
abs(ll.stats-ll)==0 #same, prob is not here

bic.mine<-n*log(rss/n)+k*log(n) #formula from wikipedia
bic.exact<- -2 * ll + log(n) * df #suggestions from comments
bic.stats<-BIC(m.test) #using stats package
abs(bic.mine-bic.stats) #mine was off
abs(bic.exact-bic.stats) #this is still off, though

或者:

SELECT * FROM (SELECT your_table.your_field, versions_starttime
               FROM your_table
               VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE)
WHERE ROWNUM = 1;

答案 5 :(得分:0)

SELECT * FROM 
  MY_TABLE
WHERE 
  <your filters>
ORDER BY PRIMARY_KEY DESC FETCH FIRST ROW ONLY

答案 6 :(得分:-1)

$sql = "INSERT INTO table_name( field1, field2 )  VALUES ('foo','bar') 
        RETURNING ID INTO :mylastid";
$stmt = oci_parse($db, $sql);
oci_bind_by_name($stmt, "mylastid", $last_id, 8, SQLT_INT);
oci_execute($stmt);

echo "last inserted id is:".$last_id;

提示:您必须在下面的{your_id_col_name}中使用您的ID列名称...

"RETURNING {your_id_col_name} INTO :mylastid"
相关问题