大小写表达式中的MIN和MAX

问题描述

我想根据条件(s.required_DATE >= trunc(SYSDATE-1))获取MIN或Max日期。

下面是我的查询

它给我错误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';

我该如何实现?

查询必须为'hhj'返回2020年8月17日,为'bbj'返回2020年8月15日

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 

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

解决方法

对于特定的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';
,

在整个case语句上使用Aggregate函数,为此,您必须使用两个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