2013-01-10 52 views
1

我已經表匯率:選擇最多的日期,那麼最大時間

T_RATE_ID T_INPUTDATE T_INPUTTIME T_SINCEDATE 
1   27.12.2012 22:41:01  28.12.2012 
1   27.12.2012 23:45:21  28.12.2012 
1   28.12.2012 21:23:11  29.12.2012 
1   28.12.2012 21:40:01  29.12.2012 
1   29.12.2012 22:33:49  30.12.2012 
1   29.12.2012 23:47:19  30.12.2012 

如何選擇這個日期最多日期,然後最大時間?在所有記錄

簡單SELECT MAX(t_sincedate), MAX(t_inputdate), MAX(t_inputtime)收益最大時間(23點47分19秒)

我希望得到以下結果:

1 27.12.2012 23:45:21 28.12.2012 
1 28.12.2012 21:40:01 29.12.2012 
1 29.12.2012 23:47:19 30.12.2012 

UPD: 我有一個日期至極我搜索率。如果這個日期沒有價格,我會選擇最近的日期。

所以在where子句我根據你提供你不真的想最大的日期,但在不同的日期與時間最多的結果已經where t_sincedate <= sysdate

+0

什麼版本的oracle? – Taryn

+0

Oracle版本10g –

+0

您的表格中是否有類似的行? '1 27.12.2012 23:47:25 29.12.2012' –

回答

1

試試這個:

SELECT T_RATE_ID, T_INPUTDATE, T_INPUTTIME, T_SINCEDATE 
FROM 
    (SELECT 
     *, ROW_NUMBER() OVER (PARTITION BY T_SINCEDATE ORDER BY T_INPUTDATE DESC, T_INPUTTIME DESC) rn 
    FROM YourTable 
    WHERE T_SINCEDATE<= sysdate) T 
WHERE rn = 1 
+0

無法正常工作。我得到了太多的行 –

+1

如果它不能正常工作,你爲什麼接受它?如果它確實工作正常,你應該修改你的評論。 :) – Ilion

+0

它不起作用,因爲你需要修復內部查詢'由T_SINCEDATE分區'不'T_INPUTDATE' – valex

1

SELECT 
    T_RATE_ID, 
    t_sincedate, 
    MAX(t_inputdate), 
    MAX(t_inputtime) 
FROM 
    <TABLE NAME> 
where t_sincedate <= sysdate 
GROUP BY 
    T_RATE_ID, t_sincedate 
ORDER BY 
    T_RATE_ID, t_sincedate; 
+0

我忘記描述where子句。請參閱更新 –

+0

有人可以解釋我爲什麼被拒絕投票嗎?我不確定我在這裏錯過了什麼。 – Ilion

+1

我不知道爲什麼這是downvoted,這個答案有效 – Taryn

0

SQLFiddle demo

select * from 
(
select t.*, 
     ROW_NUMBER() 
     OVER (partition by T_SINCEDATE 
      ORDER BY T_INPUTDATE DESC,T_INPUTTIME DESC) rn 
from t 
) t1 where rn=1 
0

也許我沒有聽清楚問題的意思,但我嘗試。

select * 
from t 
where (t_inputdate, t_inputtime) in 
    (select t_inputdate, MAX(t_inputtime) from t group by t_inputdate)