仅从今天的数据中获取最大值

时间:2014-07-30 19:27:04

标签: sql oracle

我有一组看起来像这样的数据。有没有办法只从今天的日期获取最大值而不使用where语句?

我正在使用下面的脚本,但它似乎发生冲突并获取所有时间戳和每个timestamp的最高值。如果有人知道从今天开始选择最大值的方法,那将是很好的一两行。谢谢

Select timestamp,
       max(value)
  FROM Table1
 WHERE r.timestamp > ( ( SYSDATE - TO_DATE('01/01/1970 00:00:00',
                                           'MM-DD-YYYY HH24:MI:SS') ) 
                        * 24 * 60 * 60) - 57600; 


 TIMESTAMP      VALUE
---------- ----------
1359574942          1
1359574942         12
1359575012          0
1359575012          0
1359575122          9
1359575212          0

2 个答案:

答案 0 :(得分:1)

如果您只需要今天的最大值,那么您需要的只是

select max(value) 
from table1
where timestamp > trunc(systimestamp);

如果您的表可以包含将来的数据(时间戳> systimestamp),

select max(value) 
from table1
where timestamp > trunc(systimestamp)
      and timestamp < trunc(systimestamp) + 1;

获取相应时间戳的快速解决方案,

select * from (
    select timestamp, max(value) m
    from table1
    where ts > trunc(systimestamp)
    group by timestamp
    order by m desc
) where rownum < 2;

有关其他可能的选项,请参阅How to do top 1 in Oracle

答案 1 :(得分:0)

我认为如果您只需要在查询中包含HAVING子句,只能获得与当天时间戳相等的行。

SELECT r.timestamp,
       max(r.value)
  FROM Table1 r
 WHERE r.timestamp > ( ( SYSDATE - TO_DATE('01/01/1970 00:00:00','MM-DD-YYYY HH24:MI:SS') ) * 24 * 60 * 60) - 57600 
GROUP BY r.timestamp
HAVING r.timestamp = <timestamp-for-today>

注意:您需要修复HAVING子句中的<timestamp-for-today>。我不太清楚计算的是什么(我没有花太多时间来搞清楚)。