Last date from a group in oracle table


Asked to run a query against a two column table, one column having a procedure name and the other with the date the procedure was last ran.

e.g.

PROC_NAME                      START_DTM
------------------------------ ---------
TVM Cash Balance               05-NOV-20
TVM Cash Balance               12-NOV-20
TVM Cash Balance               02-DEC-20
TVM Cash Balance               01-DEC-20
TVM Cash Balance               03-DEC-20
TVM Cash Balance               04-DEC-20
TVM Cash Balance               30-SEP-20
TVM Cash Balance               18-SEP-20
TVM Cash Balance               01-SEP-20
TVM Cash Balance               29-SEP-20
TVM Cash Balance               12-SEP-20

We needed to select the last date for each procedure.

This works :

select proc_name, max(start_dtm) from dw_main.proc_run_log where proc_name in (select distinct(proc_name) from dw_main.proc_run_log) group by proc_name order by proc_name;


PROC_NAME                                         MAX(START
------------------------------                            ---------
Summarize Tap RW Error Summary     04-DEC-20
Summarize Tap Speed Summary          04-DEC-20
Summarize Txn Timing                          04-DEC-20
TVM Cash Balance                                04-DEC-20
Update Card Statuses                           04-DEC-20
....
131 rows selected.


We wanted to double check (and to show how this could also be achieved in pl/sql) to be absolutely certain so put this together (the sql is also easier to understand ):

create or replace procedure ruslist
    is
    proc_rus varchar2(30);
    start_rus date;
CURSOR d1 IS SELECT distinct proc_name from dw_main.proc_run_log order by proc_name;
CURSOR d2 IS SELECT  max(start_dtm) from  dw_main.proc_run_log where proc_name = proc_rus;
BEGIN
    open d1;
    LOOP
    FETCH d1 into proc_rus;
  EXIT when d1% NOTFOUND;
    dbms_output.put( proc_rus);
   open d2;
   LOOP
    FETCH d2 into start_rus;
   EXIT when d2% NOTFOUND;
    dbms_output.put_line('      '||start_rus);
  END LOOP;
CLOSE d2;
  END LOOP;
CLOSE d1;
EXCEPTION
   WHEN OTHERS THEN
      raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
END ruslist;

......
Summarize Tap RW Error Summary       04-DEC-20
Summarize Tap Speed Summary            04-DEC-20
Summarize Txn Timing                            04-DEC-20
TVM Cash Balance                                  04-DEC-20
Update Card Statuses                              04-DEC-20

PL/SQL procedure successfully completed.

SQL>

Happy days.



A bit of fun.....


Although the games under MobaXTerm can be entertaining wanted something with a bit fun at a Linux level. Some interesting commands are "sl" - Steam Locomotive, to annoy admin people who can't type ls, "cowsay" (what can I say) and "figlet".  

More here :





$yum install sl
$yum install cowsay
$yum install figlet



Let me know if you have used any others or have your own silly commands.










Shell scripting in LInux

 


Have not posted for ages, pressures of work but came across this and thought it was really good.