Поэтому я пытаюсь вставить только те строки, которые связаны с ЧАСОМ, в котором произошло значение MAX. Однако я группирую по дням, а позже буду группировать по неделям, месяцам, годам и т. д. Верен ли мой подход? Причина, по которой я использую подзапрос, заключается в том, что мне нужно получить значение, которое входит в столбец HR, но добавление его в GROUP BY испортит мои ежедневные группировки (если это имеет смысл). Мне нужны определенные значения из этих столбцов для вставки с помощью написанной мной хранимой процедуры. Правильно ли направлен мой запрос ниже? Заранее спасибо
Ниже приведены некоторые образцы данных:
VALUE_ID VALUE HR VALUE_TYPE OFFSET DATA_CODE
1 75 DEC-25-2018 01:00:00 AM Bananas 1 HI
2 10 DEC-25-2018 02:00:00 AM Bananas 1 HI
3 0 DEC-25-2018 03:00:00 AM Bananas 1 HI
4 77 DEC-25-2018 04:00:00 AM Bananas 1 HI
5 787 DEC-25-2018 05:00:00 PM Bananas 1 HI
Что я хочу:
VALUE_ID VALUE HR VALUE_TYPE OFFSET DATA_CODE
5 787 DEC-25-2018 05:00:00 PM Bananas 1 HI
SELECT v.value AS MAX_VALUE
, v.offset
, v.data_code
, v.hr
, v.code
, v.data_date
, to_date(to_char(to_date(lpad(v.data_date, 7, 0), 'DDDYYYY'), 'MM/DD/YYYY'), 'MM/DD/YYYY') as converted_date
FROM value v
inner join sub_value sv on v.value_id = sv.value_id
Where v.Value_id IN (select VALUE_ID from(
select MAX(v.value) as MAX_VALUE
, MAX(v.offset) as OFFSET
, v.data_Code
, MAX(v.value_id) as VALUE_ID
, v.code
, v.data_date
, to_date(to_char(to_date(lpad(v.data_date, 7, 0), 'DDDYYYY'), 'MM/DD/YYYY'), 'MM/DD/YYYY') as converted_date
from value v
inner join sub_value sv on v.value_id = sv.value_id;
Также: Будет ли процесс такой же и для еженедельного MAX? (конечно, я собираюсь преобразовать дату / время в IW (неделя), но помимо этого)
🤔 А знаете ли вы, что...
SQL поддерживает агрегирование данных с использованием операторов GROUP BY и HAVING.