选择最大日期,然后选择最长时间

时间:2013-01-10 10:08:42

标签: sql oracle date time oracle10g

我的货币汇率表:

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 : 我有一个搜索率的日期。如果这个日期没有费率,我会选择最近的日期。

所以在第i条where t_sincedate <= sysdate

条款中

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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

答案 2 :(得分: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  

答案 3 :(得分:0)

可能我没有理解问题的含义,但我尝试了。

select * 
from t 
where (t_inputdate, t_inputtime) in 
  (select t_inputdate, MAX(t_inputtime) from t group by t_inputdate)
相关问题