oracle查询每天获取最大小时数,以及相应的行值

时间:2013-05-03 00:39:36

标签: oracle group-by max

我很难创建查询来执行以下操作:

我有这个表,名为LOG:

ID | INSERT_TIME             | LOG_VALUE
----------------------------------------
 1 | 2013-04-29 18:00:00.000 | 160473
 2 | 2013-04-29 21:00:00.000 | 154281
 3 | 2013-04-30 09:00:00.000 | 186552
 4 | 2013-04-30 14:00:00.000 | 173145
 5 | 2013-04-30 14:30:00.000 | 102235
 6 | 2013-05-01 11:00:00.000 | 201541
 7 | 2013-05-01 23:00:00.000 | 195234

我想要做的是构建一个查询,每天返回最后插入的值(使用INSERT_TIME的最大值)。我只对该列的日期部分以及LOG_VALUE列感兴趣。因此,这将是运行查询后的结果集:

2013-04-29  154281
2013-04-30  102235
2013-05-01  195234

我想我需要在INSERT_TIME列上使用GROUP BY以及MAX()函数,但是通过这样做,我似乎无法获得LOG_VALUE。有人可以帮帮我吗?

(我在Oracle 10g上)

1 个答案:

答案 0 :(得分:2)

SELECT trunc(insert_time),
       log_value
  FROM (
    SELECT insert_time,
           log_value,
           rank() over (partition by trunc(insert_time)
                            order by insert_time desc) rnk
      FROM log)
 WHERE rnk = 1

是一种选择。这使用分析函数rank来识别每天最新insert_time的行。