Hello Jim and Tom,
@Jim: Thank you for dropping by and your very useful tip. Indeed, they are usable even at the version I am using.
Anyways, here is my almost similar situation. I just want to get the sum of the maximum value that rn returns instead of displaying null value to the non-matching results as the original poster mentioned.
Table: MyTbl
CREATE TABLE MYTBL
(
ID VARCHAR2(5),
GATE VARCHAR2(50),
QTY NUMBER,
TXN NUMBER,
TIMESTAMP VARCHAR2(18),
RESULT VARCHAR2(40),
SZ NUMBER,
ACCQTY NUMBER,
DEFQTY NUMBER
);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('AA','GATE1',5442,700476212,'20110821 034636','REJECTED',315,0,1);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('AA','GATE1',5439,700485347,'20110822 134809','ACCEPTED',315,0,0);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('BB','GATE1',1404,700480350,'20110821 172614','REJECTED',315,0,1);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('BB','GATE1',1400,700485351,'20110822 134827','ACCEPTED',315,0,0);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('CC','GATE1',3068,700504830,'20110825 103828','ACCEPTED',315,0,0);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('CC','GATE1',3077,700503729,'20110825 062849','REJECTED',315,0,1);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('DD','GATE1',1278,700501729,'20110824 234504','REJECTED',315,0,1);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('DD','GATE1',1274,700506200,'20110825 144451','ACCEPTED',315,0,0);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('EE','GATE1',1338,700517646,'20110827 103130','ACCEPTED',315,0,0);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('EE','GATE1',1342,700512819,'20110826 154214','REJECTED',315,0,1);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('FF','GATE1',7037,700559780,'20110907 155804','REJECTED',315,0,1);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('FF','GATE1',7022,700574211,'20110909 203259','ACCEPTED',315,0,0);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('GG','GATE1',5881,700596916,'20110913 011007','REJECTED',315,0,1);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('GG','GATE1',5881,700597447,'20110913 030829','ACCEPTED',315,0,0);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('HH','GATE1',1347,700578905,'20110910 121119','REJECTED',315,0,1);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('HH','GATE1',1337,700608182,'20110914 142629','ACCEPTED',315,0,0);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('II','GATE1',1336,700587739,'20110911 174115','REJECTED',315,0,1);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('II','GATE1',1335,700593431,'20110912 134453','ACCEPTED',315,0,0);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('JJ','GATE1',4931,700603842,'20110913 235426','REJECTED',315,0,10);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('KK','GATE1',2965,700668761,'20110922 202359','REJECTED',315,0,1);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('LL','GATE1',4233,700680675,'20110924 121652','ACCEPTED',315,0,0);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('LL','GATE1',4215,700686196,'20110925 050318','ACCEPTED',315,0,0);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('LL','GATE1',4233,700680792,'20110924 123030','REJECTED',315,0,1);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('MM','GATE1',4325,700674897,'20110923 170810','REJECTED',315,0,1);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('MM','GATE1',4275,700688163,'20110925 121637','ACCEPTED',315,0,0);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('NN','GATE1',21181,700649156,'20110920 062119','REJECTED',315,0,1);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('NN','GATE1',21172,700650805,'20110920 124553','ACCEPTED',315,0,0);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('OO','GATE1',733,700700595,'20110927 055915','REJECTED',315,0,1);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('PP','GATE1',20450,700697001,'20110926 174608','ACCEPTED',315,0,0);
Insert into MYTBL (ID,GATE,QTY,TXN,TIMESTAMP,RESULT,SZ,ACCQTY,DEFQTY) values ('PP','GATE1',20503,700693872,'20110926 084540','REJECTED',315,0,1);
I tried:
select GATE, count(distinct ID) nooflots,
sum ( decode(rn, 1, 1)) rejLots
From (
select a.*,
max(TIMESTAMP) over (partition by ID) max_ts,
row_number() over (partition by ID order by TIMESTAMP desc, TXN) rn
from MYTBL a
)
where TIMESTAMP = max_ts
group by GATE;
Output from the above query:
GATE NOOFLOTS REJLOTS
----- -------- -------
GATE1 16 16
Expected output:
GATE NOOFLOTS REJLOTS
----- -------- -------
GATE1 16 15
I know the reason why my query got the wrong result, it is because of the ID 'LL' it is counted twice instead of just once. I may sound stupid of just following the original solution that Tom posted but, I just don't know how this will be done.
Thank you,
Rebisco