sql - 获取最大值,同时保留 SQL 中的其他列

标签 sql oracle-sqldeveloper

我有一个包含列的表格: STARTDATE、ENDDATE、ID、A、B、C(图片名称不同,但思路相同)

开始日期和结束日期跨越多天,并包括每小时的数据。此外,每个开始日期/结束日期都有多个 ID。表格的一部分的示例:

http://i58.tinypic.com/300qsn4.png

我想要做的是获取值 C 的每个 ID 的每日最大值,并保留该每日最大值出现的行中的其他值。

到目前为止,我正在做类似的事情,但是对于这个非常大的数据集,这通常会超时:

select * from table
where (Startdate, Enddate, ID, A, B, C) not in(select * from table
where (ID, C) not in(select ID, max(C) from table group by ID));

最佳答案

您可以尝试使用row_number()。假设您可以使用 startdate 作为日期指示器:

select t.*
from (select t.*,
             row_number() over (partition by id, trunc(startdate) order by c desc) as seqnum
      from table t
     ) t
where seqnum = 1;

如果您需要获取一段时间的数据,我建议加入数字以获取不同的日期,并加入以获取每个日期的值。例如,如果一条记录的时间跨度不超过 9 天:

with nums as (
      select level - 1 as n
      from dual
      connect by level <= 10
)
select t.*
from (select t.*,
             row_number() over (partition by id, trunc(startdate + n.n) order by c desc) as seqnum
      from table t join
           nums
           on startdate + nums.n <= enddate
     ) t
where seqnum = 1;

关于sql - 获取最大值,同时保留 SQL 中的其他列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25394846/

相关文章:

mysql - column=null 的 SQL 查询返回零结果集

mysql - 克尼克斯/SQL : Merge one to many join in one object

sql - Oracle,NULL但不为NULL

java.sql.SQL语法错误异常 : ORA-01795: maximum number of expressions in a list is 1000

oracle - Sql Developer 2.* 有方便的数据建模器 - Sql Developer 3.* 中有类似的东西吗

sql - 使用 ORDER BY 时可重复的结果

java - HQL返回数据类型

SQL 开发人员-GIT

oracle - Oracle中将字符拆分为多行

mysql - 弹性和关系数据库