Skip to content Skip to sidebar Skip to footer

Sql - Need To Find Duplicate Records But Exclude Reversed Transactions

I have a table of transactions which will occasionally have duplicate entries. If/When an admin finds these duplicate entries, they will reverse the transactions, therefore creatin

Solution 1:

How about:

select dt, abs(qty), abs(val),
       sum(casewhen reversal='Y'then-1else1end) as count
from transactions
groupby dt, abs(qty), abs(val)
havingsum(casewhen reversal='Y'then-1else1end) >1;

I have just tested it in Oracle and it works:

createtable transactions
( dt date
, qty number
, val number
, reversal varchar2(1)
);

insertinto transactions values (to_date('1/1/08','mm/dd/yy')    , 14    ,    70.00    , 'N');
insertinto transactions values (to_date('1/1/08','mm/dd/yy')    , 14    ,    70.00    , 'N');
insertinto transactions values (to_date('1/1/08','mm/dd/yy')    , -14   ,    -70.00   , 'Y');
insertinto transactions values (to_date('2/1/08','mm/dd/yy')    , 17    ,    89.00    , 'N');
insertinto transactions values (to_date('2/15/08','mm/dd/yy')   , 18    ,    95.00    , 'N');
insertinto transactions values (to_date('2/15/08','mm/dd/yy')   , 18    ,    95.00    , 'N');
insertinto transactions values (to_date('3/1/08','mm/dd/yy')    , 11    ,    54.00    , 'N');
insertinto transactions values (to_date('3/1/08','mm/dd/yy')    , -11   ,    -54.00   , 'Y');
insertinto transactions values (to_date('3/1/08','mm/dd/yy')    , 11    ,    54.00    , 'N');
insertinto transactions values (to_date('3/1/08','mm/dd/yy')    , 11    ,    54.00    , 'N');
insertinto transactions values (to_date('3/1/08','mm/dd/yy')    , 11    ,    54.00    , 'N');

SQL>select dt, abs(qty), abs(val),
  2sum(casewhen reversal='Y'then-1else1end) as count
  3from transactions
  4groupby dt, abs(qty), abs(val)
  5havingsum(casewhen reversal='Y'then-1else1end) >1;

DT            ABS(QTY)   ABS(VAL)      COUNT
----------- ---------- ---------- ----------15-FEB-20081895201-MAR-200811543

Post a Comment for "Sql - Need To Find Duplicate Records But Exclude Reversed Transactions"