Reputation: 11
I have following SQL to execute:
SELECT ACCT_GRP_CODE, MAX(RECEPTION_TIMES) AS RECEPTION_TIMES
FROM VIEW_ID_MONITORING
WHERE SYSTIMESTAMP AT TIME ZONE 'UTC'>FROM_TZ(CAST(TO_DATE(TO_CHAR(SYSDATE, 'YYYYMMDD') || RECEPTION_END, 'YYMMDDHH24:MI') AS TIMESTAMP), UTC_TIME_TOTAL_OFFSET)
GROUP BY ACCT_GRP_CODE
This calculates the highest reception time in the past. However this only returns data for account groups that have reception times in the past. I also want to return the account group codes without reception times in the past.
How should I do that?
Upvotes: 0
Views: 50
Reputation: 1269633
One method is conditional aggregation:
SELECT ACCT_GRP_CODE,
MAX(CASE WHEN SYSTIMESTAMP AT TIME ZONE 'UTC'>FROM_TZ(CAST(TO_DATE(TO_CHAR(SYSDATE, 'YYYYMMDD') || RECEPTION_END, 'YYMMDDHH24:MI') AS TIMESTAMP), UTC_TIME_TOTAL_OFFSET) THEN RECEPTION_TIMES
END) AS RECEPTION_TIMES
FROM VIEW_ID_MONITORING
GROUP BY ACCT_GRP_CODE;
If you have a list of the account group codes, you can do:
SELECT agc.ACCT_GRP_CODE, MAX(vim.RECEPTION_TIMES) AS RECEPTION_TIMES
FROM ACCOUNT_GROUP_CODES agc LEFT JOIN
VIEW_ID_MONITORING vim
ON agc.ACCT_GRP_CODE = vim.ACCT_GRP_CODE AND
SYSTIMESTAMP AT TIME ZONE 'UTC'>FROM_TZ(CAST(TO_DATE(TO_CHAR(SYSDATE, 'YYYYMMDD') || RECEPTION_END, 'YYMMDDHH24:MI') AS TIMESTAMP), UTC_TIME_TOTAL_OFFSET)
GROUP BY agc.ACCT_GRP_CODE;
Upvotes: 3