2014-11-01 68 views
1

我有一個記錄字段數據收集的表,每個數據段從一個組作爲單獨的行(例如,項目的長度和寬度是表中的每一行)。返回記錄組的最大值(字段) - 不,不僅僅是max()

我想顯示按最近日誌條目的時間戳排序的日誌結果,並按項目分組。

我嘗試了各種風格的最大(時間戳)在子選項,連接等,但沒有喜悅。

基本上,像這樣(簡化所以它更容易輸入):

item | timestamp | data 
    G | 1000  | yellow 
    D | 1001  | blue 
    C | 1002  | red 
    G | 1003  | green 
    D | 1004  | pickle 
    Z | 1005  | trotsky 

我想我的結果集進行排序,如:

G | 1000  | yellow 
    G | 1003  | green 
    D | 1001  | blue 
    D | 1004  | pickle 
    C | 1002  | red 
    Z | 1005  | trotsky 

這將意味着集團通過項目,順序按時間戳,但當然不起作用,因爲我需要所有行,並且將項目A置於列表頂部,而不是最近記錄的項目。

顯然我錯過了解決方案的真正的肉。 GROUP BY不起作用,因爲我仍然需要返回所有行,因此某種JOIN似乎有意義,我只需要Oracle知道如何構建它。

+0

你可以爲你的問題準備[SQLFiddle snippet](http://sqlfiddle.com/)嗎? – saaj 2014-11-01 15:18:47

回答

2

它看起來像要按每個項目的時間戳的最小值來排序項目。試試這個:

select l.* 
from logs l join 
    (select item, min(timestamp) as mints 
     from logs 
     group by item 
    ) i 
    on l.item = i.item 
order by i.mints, l.item, l.timestamp; 

作爲說明:您的數據尖叫「按分鐘排序」。你的文字說「按最大順序排列」。顯然,如果你想要最大值,這只是對這個查詢的簡單修改。

+0

完美!感謝SO的專家! – 2014-11-02 05:48:43

相關問題