我很难创建查询来执行以下操作:
我有这个表,名为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上)
答案 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
的行。