2013-05-03 41 views
1

我有一個很難創建一個查詢做到以下幾點:Oracle查詢每天獲得最大的時間,以及相應的行值

我有這樣的表,稱爲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中)

回答

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行。

+0

感謝您的快速回答!現在用我的_live_數據庫(5000萬行)進行測試... – ditto1977 2013-05-03 02:13:10

+0

更新:永久佔用,但它完成了工作。非常感謝@Justin! – ditto1977 2013-05-03 14:35:50

相關問題