У меня есть таблица, похожая на:
Теперь я хотел бы получить для каждой группы минимальную и максимальную даты на основе столбца даты создания и столбца 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
добро пожаловать @EllisNijland удачи!