我有以下SQL执行:
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
计算过去的最高接收时间。 但是,这仅返回过去具有接收时间的帐户组的数据。我还希望在过去没有接收时间的情况下退回帐户组代码。
我该怎么做?
答案 0 :(得分:3)
一种方法是条件聚合:
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;
如果您有帐户组代码列表,则可以执行以下操作:
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;