从发生最大值的行中抓取某些列

时间:2018-08-15 18:26:18

标签: sql oracle

因此,我尝试仅插入与发生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(星期),除此之外)

1 个答案:

答案 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;