因此,我尝试仅插入与发生MAX值的HOUR相关的行。但是我按天分组,以后再按周,月,年等分组。我的方法正确吗?我之所以使用子查询,是因为我需要获取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(星期),除此之外)
答案 0 :(得分:1)
一种简单的方法使用row_number()
或rank()
。这是一个示例,假设您想要每个data_code
的最大值:
select t.*
from (select t.*, row_number() over (partition by data_code order by value desc) as seqnum
from t
) t
where seqnum = 1;