如何在MAX子句中获取没有值的行的结果

时间:2017-08-11 11:20:43

标签: sql oracle

我有以下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

计算过去的最高接收时间。 但是,这仅返回过去具有接收时间的帐户组的数据。我还希望在过去没有接收时间的情况下退回帐户组代码。

我该怎么做?

1 个答案:

答案 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;