I tried using OR in the WHERE clause for this code but I get an error on the TIMESTAMP_FORMAT function, but this as such can’t be the issue because it’s exactly the same as in the working code when using UNION.
When I use a UNION in the code it works perfectly and I get exactly what I want, but I seriously doubt that’s the correct way to do it.
I want all records that have text starting with (PUP) on field UPTEXT which DO NOT have an empty value on field UPLSTD AND that have a LAST USED date that’s older than 12 days on field UPLSTD I don’t want the empty ones here because I can’t use the TIMESTAMP_FORMAT function on empty values. But what I also need is all records that also have text starting with (PUP) on field UPTEXT but do have an empty value on field UPLSTD AND that have a CREATION date that’s older than 12 days on field UPCRTD.
This is the faulty code:
SELECT UPUPRF, UPTEXT, UPLSTD, UPCRTD FROM SYSENGTMP.LLDLSTPRF WHERE ( UPTEXT LIKE '(PUP)%' AND UPLSTD <> ' ' AND TIMESTAMP_FORMAT(UPLSTD, 'RRMMDD') < CURRENT_DATE - 12 DAYS) OR ( UPTEXT LIKE '(PUP)%' AND UPLSTD = ' ' AND TIMESTAMP_FORMAT(UPCRTD, 'RRMMDD') < CURRENT_DATE - 12 DAYS);
This is the working code:
SELECT UPUPRF, UPTEXT, UPLSTD, UPCRTD FROM SYSENGTMP.LLDLSTPRF WHERE ( UPTEXT LIKE '(PUP)%' AND UPLSTD <> ' ' AND TIMESTAMP_FORMAT(UPLSTD, 'RRMMDD') < CURRENT_DATE - 12 DAYS) UNION SELECT UPUPRF, UPTEXT, UPLSTD, UPCRTD FROM SYSENGTMP.LLDLSTPRF WHERE ( UPTEXT LIKE '(PUP)%' AND UPLSTD = ' ' AND TIMESTAMP_FORMAT(UPCRTD, 'RRMMDD') < CURRENT_DATE - 12 DAYS); `` This is the result of the working UNION code which is exactly what I want. I don't get any result with the faulty code excep for the error message on the TIMESTAMP_FORMAT. UPUPRF UPTEXT UPLSTD UPCRTD ------------------------------------------------------ USER1 (PUP) TEXT ABCDEFG 190805 190805 USER2 (PUP) TEXT ABCDEFG 181113 181113 USER3 (PUP) TEXT ABCDEFG 190728 190625 USER4 (PUP) TEXT ABCDEFG 190726 190613 USER5 (PUP) TEXT ABCDEFG 190625 USER6 (PUP) TEXT ABCDEFG 190625 USER7 (PUP) TEXT ABCDEFG 190625 USER8 (PUP) TEXT ABCDEFG 180725 USER9 (PUP) TEXT ABCDEFG 190730 190625
Advertisement
Answer
Make two steps:
1) put all relevant data in a temp-table 2) do query over the temp-table
like this:
1) selection: only relevant rows SELECT UPUPRF, UPTEXT, UPLSTD, UPCRTD into #MyTempTable FROM SYSENGTMP.LLDLSTPRF WHERE (UPLSTD <> ' ' AND UPLSTD = ' '); 2) selection: work on relevant data // column selection is allready done SELECT * FROM #MyTempTable WHERE ( UPTEXT LIKE '(PUP)%' AND TIMESTAMP_FORMAT(UPCRTD, 'RRMMDD') < CURRENT_DATE - 12 DAYS);