case 表达式中的 MIN 和 MAX

MIN and MAX in case expression

我想根据条件(s.REQUIRED_DATE >= trunc(SYSDATE-1))获得最小或最大日期。

下面是我的查询。

它给我错误 ORA-00937: not a single-group group function

SELECT 
case when s.REQUIRED_DATE >= trunc(SYSDATE-1) then
    MIN(required_date)
else
    MAX(required_date)
end required_date
FROM anytable s
WHERE     s.abc = 'hhj';

我怎样才能做到这一点?

Query must return 17-AUG-2020 for 'hhj' and 15-AUG-2020 for 'bbj'

id    abc    required_date
1     hhj    14-Aug-2020
2     hhj    17-AUG-2020
3     hhj    19-AUG-2020
3     bbj    15-AUG-2020
4     bbj    12-AUG-2020 

如果需要,我也可以采用任何其他方法。 请推荐

对整个 case 语句使用聚合函数,为此你必须使用两个 case 语句。

SELECT 
MIN(case when s.ENTRY_DATE >= trunc(SYSDATE-1) then
    ENTRY_DATE
end) MIN_required_date,
MAX(case when s.ENTRY_DATE < trunc(SYSDATE-1) then
    ENTRY_DATE
end) MAX_required_date
FROM DATE_TEST s

看来,对于特定的 abc 你想要得到:

  • 最接近和超过昨天的日期 required_date 如果有一个 required_date 超过昨天的日期,或者
  • 如果他们昨天没有通过日期,请获取最新的 required_date

如果是这样,这个查询可能就是您想要的:

select
  case when max(required_date)>=trunc(sysdate-1) then
    min(case when required_date>=trunc(sysdate-1) then required_date end)
    else max(required_date)
  end required_date
from anytable s
where s.abc='hhj';