min/max 组中 table 中的 oracle sql 中的数据

min/max data in oracle sql in table in group

我有一个 table 看起来像:

现在我想根据创建日期列和 str_val 列为每个组获取最小和最大日期。因此对于 group_id 1 和 object_id 1 必须显示 01-01-2010 和 25-04-2016 以及 group_id 2 和 object_id 2 都显示 01-02-2001最大值和最小值这可以使用oracle实现吗sql?

我想得到:

如果整个数据集都能胜任样本数据集,那么使用这样的查询

SELECT group_id, object_id,
       MIN(LEAST(creation_date,
                 CASE WHEN LENGTH(TRIM(str_val))=10 AND INSTR(str_val,'-')>0 THEN 
                           TO_DATE(TRIM(str_val),'dd-mm-yyyy') 
                       END)) AS "MIN",
       MAX(GREATEST(creation_date,
                    CASE WHEN LENGTH(TRIM(str_val))=10 AND INSTR(str_val,'-')>0 THEN 
                              TO_DATE(TRIM(str_val),'dd-mm-yyyy') 
                          END)) AS "MAX"
  FROM t
 GROUP BY group_id, object_id
 ORDER BY group_id, object_id

假设creation_date是DATE类型,str_val显然是字符串类型

然后你可以使用分组依据:

SELECT GROUP_ID, OBJECT_ID, MIN(CREATION_DATE), MAX(CREATION_DATE)
FROM TABLE
GROUP BY GROUP_ID, OBJECT_ID