I have a cursor that fetches address for the id passed, based on the latest activity date.
CURSOR get_address_upd_c (
id t1.id%TYPE
) IS
SELECT street_line1,
street_line2,
city,
stat_code,
zip,
activity_date,
atyp_code
FROM addr
WHERE addr_im = '1'
AND status_ind IS NULL
AND from_date < SYSDATE
AND DECODE (TO_DATE, NULL, SYSDATE, TO_DATE) >= SYSDATE
ORDER BY activity_date DESC;
There are certain ids's that have more than 1 address for the date based n a atyp code. My query should fetch address for a particular atyp code('AB') , if that id does not have address of this AB type then i should fetch address for another atype code like'SP'.
I tried to filter my above cursor result as decode statements , but fail when my id has more than 1 atyp code.
Tried the below in IN clause
SELECT DECODE (
DECODE (
(SELECT atyp_code
FROM addr a2
WHERE a2.id = '1' AND a2.status_ind IS NULL
AND (TRUNC (SYSDATE) BETWEEN TRUNC(NVL (
a2.from_date,
NVL (
a2.TO_DATE,
SYSDATE)))
AND TRUNC(NVL (
a2.TO_DATE,
SYSDATE)))
AND a2.atyp_code = 'AB'),
NULL,
(SELECT atyp_code
FROM addr a2
WHERE a2.id = '1' AND a2.status_ind IS NULL
AND (TRUNC (SYSDATE) BETWEEN TRUNC(NVL (
a2.addr_from_date,
NVL (
a2.TO_DATE,
SYSDATE)))
AND TRUNC(NVL (
a2.TO_DATE,
SYSDATE)))
AND a2.atyp_code = 'SP'),
'AB'),
NULL,
(SELECT atyp_code
FROM addr a2
WHERE a2.id = '1' AND a2.status_ind IS NULL
AND (TRUNC (SYSDATE) BETWEEN TRUNC(NVL (
a2.from_date,
NVL (
a2.TO_DATE,
SYSDATE)))
AND TRUNC(NVL (a2.TO_DATE,
SYSDATE)))),
'ar')
AS t
FROM DUAL;
My query always goes to the 'ar' part even though my id has records in 'SP' type
Sample data:
ID Street_1 City State Type_Code Activity_Date
1 aaa sds MI SM 23-Dec-19
1 bb wew TN IN 23-Dec-19
1 ccc fcvc AR SP 23-Dec-19
1 dd ewe NY SL 23-Dec-19
2 eee fff TX AB 5-Jan-20
3 gg kkk TX SM 19-Sep-18
O/p should be like the below based on the type code values.
ID Street_1 City State Type_Code Activity_Date
1 ccc fcvc AR SP 23-Dec-19
2 eee fff TX AB 5-Jan-20
3 gg kkk TX SM 19-Sep-18
Create and insert scripts for the above sample
CREATE TABLE addr (
id NUMBER(8, 0),
street_1 VARCHAR2(100),
city VARCHAR2(100),
state VARCHAR2(5),
type_code VARCHAR2(10),
activity_date DATE,
status_ind VARCHAR2(5),
addr_from_date DATE,
addr_to_date DATE
);
INSERT INTO addr (id,street_1,city,state,type_code,activity_date,status_ind,addr_from_date,addr_to_date) values(1,'aaa','sds','MI','SM','23-DEC-19',NULL,'01-SEP-15',NULL);
INSERT INTO addr (id,street_1,city,state,type_code,activity_date,status_ind,addr_from_date,addr_to_date) values(1,'bb','wew','TN','IN','23-DEC-19',NULL,'01-JUN-18',NULL);
INSERT INTO addr (id,street_1,city,state,type_code,activity_date,status_ind,addr_from_date,addr_to_date) values(1,'ccc','fcvc','AR','SP','23-DEC-19',NULL,'01-SEP-15',NULL);
INSERT INTO addr (id,street_1,city,state,type_code,activity_date,status_ind,addr_from_date,addr_to_date) values(1,'dd','ewe','NY','SL','23-DEC-19',NULL,'01-SEP-18',NULL);
INSERT INTO addr (id,street_1,city,state,type_code,activity_date,status_ind,addr_from_date,addr_to_date) values(2,'ee','fff','TX','AB','05-JAN-20',NULL,'01-MAY-17',NULL);
INSERT INTO addr (id,street_1,city,state,type_code,activity_date,status_ind,addr_from_date,addr_to_date) values(3,'gg','kkk','TX','SM','19-SEP-18',NULL,'23-JUL-15',NULL);
INSERT INTO addr (id,street_1,city,state,type_code,activity_date,status_ind,addr_from_date,addr_to_date) values(4,'aaa','sds','MI','PA','03-NOV-19',NULL,'01-MAR-15',NULL);
INSERT INTO addr (id,street_1,city,state,type_code,activity_date,status_ind,addr_from_date,addr_to_date) values(4,'lll','mno','LA','PB','03-NOV-19',NULL,'01-SEP-15',NULL);
INSERT INTO addr (id,street_1,city,state,type_code,activity_date,status_ind,addr_from_date,addr_to_date) values(4,'jjj','pqr','LA','SP','03-NOV-19',NULL,'01-SEP-15',NULL);
INSERT INTO addr (id,street_1,city,state,type_code,activity_date,status_ind,addr_from_date,addr_to_date) values(5,'mmm','dee','NY','SM','03-MAR-19',NULL,'10-SEP-15',NULL);
INSERT INTO addr (id,street_1,city,state,type_code,activity_date,status_ind,addr_from_date,addr_to_date) values(5,'ppp','aru','TX','SP','03-DEC-17',NULL,'01-SEP-15',NULL);