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
我有一个 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