Posts

Showing posts with the label SQL

Analytic functions LEAD y LAG- Example

Las funciones LAG y LEAD te permiten obtener el valor siguiente o anterior respectivamente al registro actual considerando un orden definido. Explicarlo quizás no es tan sencillo como con un ejemplo, imaginemos que tenemos una tabla donde está el resumen de un estados de cuenta bancario donde podemos ver el saldo que tenía el cliente al cierre de cada mes. create table Edo_Cta (Mes date, Saldo number) tablespace users; insert into Edo_Cta (mes, Saldo) values (to_date('1-Jan-2019','dd-Mon-yyyy'), 1000); insert into Edo_Cta (mes, Saldo) values (to_date('1-Feb-2019','dd-Mon-yyyy'), 1200); insert into Edo_Cta (mes, Saldo) values (to_date('1-Mar-2019','dd-Mon-yyyy'), 2000); insert into Edo_Cta (mes, Saldo) values (to_date('1-Apr-2019','dd-Mon-yyyy'), 2500); insert into Edo_Cta (mes, Saldo) values (to_date('1-May-2019','dd-Mon-yyyy'), 2800); insert into Edo_Cta (mes, Saldo) values (to_date('1-Jun-2019'

Analytic functions RANK - Example

Funciones analíticas como dba utilizamos muy poco esta consulta un poco más complejas sin embargo son muy poderosas, aquí un ejemplo sencillo de la función RANK. Con la función RANK podemos numerar o jerarquizar un subconjunto de registros según sus valores, cada subconjunto de valores diferentes la numeración o jerarquía se reinicia. create table entradas (nombre varchar2(32), fec_entrada date) tablespace users; INSERT INTO entradas (nombre, fec_entrada) SELECT chr(mod(LEVEL,10)+65),(sysdate+LEVEL) FROM dual CONNECT BY LEVEL <= 100; Hacemos la magia con la función RANK y veremos que los ordena según la fecha de entrada y les da un número según su jerarquía de menor a mayor. SQL> select * from (select nombre,fec_entrada, rank() over (partition by nombre order by fec_entrada) as myrank from entradas); NOMBRE FEC_ENTRA MYRANK -------------------------------- --------- ---------- A 22-MAR-20 1 A

NULLIF, NVL, NVL2, COALESCE Functions

create table hr . dummy (id number , name varchar2 ( 32 ), bdate date ) tablespace users; insert into hr . dummy (id,name, bdate ) values ( 3 , 'Carl' ,SYSDATE); insert into hr . dummy (id,name, bdate ) values ( 7 , 'Gary' ,SYSDATE); insert into hr . dummy (id,name, bdate ) values ( 2 ,NULL,SYSDATE); insert into hr . dummy (id,name, bdate ) values ( 6 ,NULL,SYSDATE); insert into hr . dummy (id,name, bdate ) values ( 1 , 'Anna' , SYSDATE); insert into hr . dummy (id,name, bdate ) values ( 5 , 'Fitzgerald' ,SYSDATE); insert into hr . dummy (id,name, bdate ) values ( 4 ,NULL,SYSDATE); insert into hr . dummy (id,name, bdate ) values ( 0 ,NULL,SYSDATE); commit; NVL2  lets you determine the value returned by a query based on whether a specified expression is null or not null NVL just return something whether expression is NULL. SELECT NAME, NVL2(NAME, 'Registered' , 'Pen