首页 > 解决方案 > 如何获取一组(Day'sworth)数据的 MAX 值的小时?

问题描述

假设我已经计算了一天内销售的最大水果数量(存储在值列中)。我需要知道这个最大值出现的 time_of_day(即下午 3:00)。我怎么能做到这一点而不必按 time_of_day 分组(因为这会导致分组失败)。下面是我将开始使用的示例:

 Value        Data_date   Name      Hour
   7          7/17/2018    A        2:00 AM
  15          7/17/2018    A        4:00 AM
  25          7/17/2018    A        7:00 PM
  55          7/18/2018    B        1:00 AM
  17          7/18/2018    B        4:00 AM 

以下是我想要的:

  MAX(Value)  Data_date  Name     Hour
  25          7/17/2018   A       7:00 PM
  55          7/18/2018   B       1:00 AM

以下是我尝试过的:

select max(value)
     , data_date
     , name
     , hour
  from table
  group by value, grouping sets(data_date, name), grouping sets(hour, name);

根据我在网上挖掘的内容,我认为我将不得不按组分组,但不确定我需要在哪些组上分组......

提前致谢!

标签: sqloracle

解决方案


您可以使用 :

select t.*
from table t
where value = (select max(t1.value) 
               from table t1 
               where t1.name = t.name and
                     t1.data_date = t.data_date
              );

但是,您也可以使用row_number()函数:

select t.*
from (select *, row_number () over (partition by name, data_date order by value desc) as seq
      from table t
     ) t
where seq = 1;

推荐阅读