Hi All,
I have table and its get update and insert new records whenever any data updates and changes in source side through etl jobs.This table have
both current and history data but i want to select only recent data based on change date for each empid.But for few records there is no changes in source side
so for those records have only single entries(for example empid=1) only 1 entry with some date but few records have multiple entires for those i need to pick latest entry.but if i consider maximum recent change datefew records getting filter for example empid=1,4 but these ids have update data with different dates and after that there is no update for those records.
.I can not consider only specific required dates for each empids in filter conditions also because i have millions of records with multiple records for each empid with different changedates but i need only recent update record or newly inserted record based on date condition based on EMPID and it is primarykey and this value will not change.
How to get the required output using generic sql with out harcoding dates because records have multiple dates and below data is provided just for sample.
Please check below sample input and output.
INPUT:
EMPid | NAME | PHNO | ZIPno | CNTRY | CHANGEDATE1 |
1 | TEST1 | 121 | 501 | US | 01-Apr-95 |
2 | TEST2 | 122 | 502 | UK | 01-Apr-95 |
2 | TEST22 | 1222 | 5022 | UK | 11-Jul-15 |
3 | TEST3 | 123 | 503 | ZER | 01-Apr-95 |
3 | TEST33 | 1233 | 5033 | ZER3 | 11-Jul-15 |
3 | TEST333 | 12333 | 50333 | ZER | 11-Jul-17 |
4 | TEST4 | 124 | 504 | IND | 01-Apr-95 |
4 | TEST44 | 1244 | 514 | IND14 | 11-Jul-15 |
5 | TEST5 | 1255 | 505 | AUS1 | 01-Apr-95 |
5 | TEST5 | 1255 | 505 | AUS2 | 11-Jul-17 |
6 | TEST6 | 1266 | 605 | Amt | 11-Oct-18 |
output:
EMPid | NAME | PHNO | ZIPno | CNTRY | CHANGEDATE1 |
1 | TEST1 | 121 | 501 | US | 01-Apr-95 |
2 | TEST22 | 1222 | 5022 | UK | 11-Jul-15 |
3 | TEST333 | 12333 | 50333 | ZER | 11-Jul-17 |
4 | TEST44 | 1244 | 514 | IND14 | 11-Jul-15 |
5 | TEST5 | 1255 | 505 | AUS2 | 11-Jul-17 |
6 | TEST6 | 1266 | 605 | Amt | 11-Oct-18 |
Sample scripts:
CREATE TABLE Customers (
empid NUMBER,
name VARCHAR2(50),
phno VARCHAR2(50),
zipno VARCHAR2(50),
cntry VARCHAR2(50)
changedates1 date
);
insert script:
INSERT INTO Customers VALUES (1,'TEST1','121','501','US',01-Apr-95);
INSERT INTO Customers VALUES (2,'TEST2','122','502','UK',01-Apr-95);
INSERT INTO Customers VALUES (2,'TEST22','1222','5022','UK',11-Jul-15);
INSERT INTO Customers VALUES (3,'TEST3','123','503'.'ZER',01-Apr-95);
INSERT INTO Customers VALUES (3,TEST33,1233,5033,ZER3,11-Jul-15);
INSERT INTO Customers VALUES (3,'TEST333','12333','50333','ZER',11-Jul-17);
INSERT INTO Customers VALUES (4,'TEST4','124','504','IND',01-Apr-95);
INSERT INTO Customers VALUES (4,'TEST44','1244','514','IND14',11-Jul-15);
INSERT INTO Customers VALUES (5,'TEST5','1255','505','AUS1',01-Apr-95);
INSERT INTO Customers VALUES (5,'TEST5','1255','505','AUS2',11-Jul-17);
INSERT INTO Customers VALUES (6,'TEST6','1266','605','Amt',11-Oct-18);