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';
我想根据条件(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';