我想获取最后一行,我将其插入到 Oracle 11g Express 数据库的表中。我怎样才能做到这一点?
问问题
248167 次
7 回答
54
表中没有“最后”行这样的东西,因为 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来演示。
于 2012-09-11T22:01:30.447 回答
26
SELECT * FROM (
SELECT * FROM table_name ORDER BY sortable_column DESC
) WHERE ROWNUM = 1;
于 2015-05-11T18:11:13.353 回答
12
select * from table_name ORDER BY primary_id DESC FETCH FIRST 1 ROWS ONLY;
这是最简单的,不做子查询
于 2019-09-24T03:42:58.230 回答
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
)
;
请注意,要使此查询仅返回一行,键必须在没有关系的情况下进行排序。如果允许关联,则此查询将返回与最大键关联的所有行。
于 2014-06-12T12:59:07.367 回答
1
你可以这样做:
SELECT * FROM (SELECT your_table.your_field, versions_starttime
FROM your_table
VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE)
WHERE ROWNUM = 1;
或者:
SELECT your_field,ora_rowscn,scn_to_timestamp(ora_rowscn) from your_table WHERE ROWNUM = 1;
于 2016-02-01T13:12:42.877 回答
0
SELECT * FROM
MY_TABLE
WHERE
<your filters>
ORDER BY PRIMARY_KEY DESC FETCH FIRST ROW ONLY
于 2020-09-28T16:03:55.000 回答
-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"
于 2014-03-13T07:18:47.223 回答