【问题标题】:Select max date, then max time选择最大日期,然后选择最大时间
【发布时间】:2012-12-24 16:27:43
【问题描述】:

我有汇率表:

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

如何选择最大日期,然后选择该日期的最大时间?

Simple 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

【问题讨论】:

  • 你的表中能有类似的行吗? 1 27.12.2012 23:47:25 29.12.2012
  • 列上的数据类型是什么?
  • 不,现在有类似的行。
  • T_INPUTTIME 字段是什么数据类型?
  • T_SINCEDATE 是冗余列吗?因为它是 T_INPUTDATE+1 天。

标签: sql oracle date time oracle10g


【解决方案1】:

可能我没明白问题的意思,但我尝试了。

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

【讨论】:

    【解决方案2】:

    试试这个:

    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
    

    【讨论】:

    • 如果它不能正常工作,你为什么接受它?如果它确实工作正常,你应该修改你的评论。 :)
    • 它不起作用,因为您需要将内部查询修复为partition by T_SINCEDATE而不是T_INPUTDATE
    【解决方案3】:

    根据您提供的结果,您实际上并不需要最大日期,而是需要最大时间的不同日期。

    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;
    

    【讨论】:

    • 有人能解释为什么我被否决了吗?我不确定我在这里错过了什么。
    【解决方案4】:

    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  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 2016-06-10
      • 2022-01-03
      • 1970-01-01
      • 2011-09-30
      相关资源
      最近更新 更多