将数量/最大选择条件合二为一

时间:2019-04-08 15:02:19

标签: sql oracle

我正在尝试将这两个查询合并为一个,所以我有一个选择查询以返回包含表计数和最大日期的一行。我不知道这样做的简单方法。有任何想法吗?谢谢

select count(*) from ods.ADDRESS

select max(last_modified)
from
(
select
CASE WHEN MODIFY_DT IS NULL THEN CREATE_DT
ELSE MODIFY_DT END AS LAST_MODIFIED
FROM ODS.ADDRESS
)

3 个答案:

答案 0 :(得分:3)

这里是一种选择:

SELECT
    COUNT(*) AS cnt,
    MAX(CASE WHEN MODIFY_DT IS NULL THEN CREATE_DT ELSE MODIFY_DT END) AS LAST_MODIFIED
FROM ODS.ADDRESS;

请注意,您甚至不需要子查询。我们也可以尝试使用COALESCE简化上述操作:

SELECT
    COUNT(*) AS cnt,
    MAX(COALESCE(MODIFY_DT, CREATE_DT)) AS LAST_MODIFIED
FROM ODS.ADDRESS;

答案 1 :(得分:3)

有条件的聚合是执行此操作的一种方法:

select COUNT(*), 
       MAX(CASE WHEN MODIFY_DT IS NULL 
                THEN CREATE_DT
                ELSE MODIFY_DT 
           END) AS LAST_MODIFIED
from ODS.ADDRESS a;

答案 2 :(得分:2)

好吧,简单地将它们结合起来:D

select count(*), max(
CASE WHEN MODIFY_DT IS NULL THEN CREATE_DT
ELSE MODIFY_DT END ) AS LAST_MODIFIED
  from ods.ADDRESS