sql - multiple - rownum oracle
Cómo obtener la última fila de una tabla Oracle. (5)
La última fila de acuerdo con un orden total estricto sobre la clave compuesta 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)
)
;
Dado el caso especial en el que K es simple (es decir, no compuesto), lo anterior se reduce a:
SELECT *
FROM TableX AS o
WHERE NOT EXISTS (
SELECT *
FROM TableX AS i
WHERE i.k1 > o.k1
)
;
Tenga en cuenta que para que esta consulta devuelva solo una fila, la clave debe ordenarse sin ataduras. Si se permiten vínculos, esta consulta devolverá todas las filas vinculadas con la clave más grande.
Quiero obtener la última fila, que inserté en una tabla en una base de datos Oracle 11g Express. ¿Cómo puedo hacer esto?
No hay tal cosa como la "última" fila en una tabla, ya que una tabla de Oracle no tiene un concepto de orden.
Sin embargo, suponiendo que quisiera encontrar la última clave primaria insertada y que esta clave primaria es un número incremental, podría hacer algo como esto:
select *
from ( select a.*, max(pk) over () as max_pk
from my_table a
)
where pk = max_pk
Si tiene la fecha en que se creó cada fila, esto se convertiría, si la columna se nombra como created
:
select *
from ( select a.*, max(created) over () as max_created
from my_table a
)
where created = max_created
Alternativamente, puede usar una consulta agregada, por ejemplo:
select *
from my_table
where pk = ( select max(pk) from my_table )
Aquí hay un pequeño SQL Fiddle para demostrar.
Puedes hacerlo así:
SELECT * FROM (SELECT your_table.your_field, versions_starttime
FROM your_table
VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE)
WHERE ROWNUM = 1;
O:
SELECT your_field,ora_rowscn,scn_to_timestamp(ora_rowscn) from your_table WHERE ROWNUM = 1;
SELECT * FROM (
SELECT * FROM table_name ORDER BY sortable_column DESC
) WHERE ROWNUM = 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;
Consejo: debe usar el nombre de la columna de identificación en {your_id_col_name} a continuación ...
"RETURNING {your_id_col_name} INTO :mylastid"