Sql 仅从今天的数据中获取max

Sql 仅从今天的数据中获取max,sql,oracle,Sql,Oracle,我有一组像这样的数据。有没有一种方法只获取今天日期的最大值而不使用where语句 我在使用下面的脚本,但它似乎有冲突,并从每个时间戳中获取所有时间戳和最高值。如果有人知道一种方法,可以在一行或两行中选择今天的最大值,那就太好了。多谢各位 Select timestamp, max(value) FROM Table1 WHERE r.timestamp > ( ( SYSDATE - TO_DATE('01/01/1970 00:00:00',

我有一组像这样的数据。有没有一种方法只获取今天日期的最大值而不使用where语句

我在使用下面的脚本,但它似乎有冲突,并从每个时间戳中获取所有时间戳和最高值。如果有人知道一种方法,可以在一行或两行中选择今天的最大值,那就太好了。多谢各位

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

如果你只需要今天的最大值,你所需要的就是

select max(value) 
from table1
where timestamp > trunc(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;

有关其他可能的选项,请参阅。

我认为如果您只需要在查询中包含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子句中的。我不太确定计算结果是什么,我没有花太多时间来弄清楚。

为什么不能使用where语句?如果我使用where语句,我会根据时间戳得到多个值。我只需要这个时间范围内的最大值。只要从查询中的SELECT语句中删除时间戳,您就会得到预期的最大值。我需要时间戳。这就是问题的关键所在。当然,如果你只是选择一个最大值,它就会起作用。我需要时间戳以及它发生的时间。时间戳就是问题所在。如果没有发生的时间,数据是无用的。OP需要对应于最大值的TS,这会给出对应于最大TS的最大值。@Nivas你是对的。我确实添加了一条注释,HAVING子句可以过滤当前日期的时间戳。我已经纠正了这个问题。感谢您的质量审核:-。顺便说一句,今天的时间戳是SYSTIMESTAMP还是TRUNCSYSTIMESTAMP取决于您是只想要日期部分的日期和00:00:00.0000,还是想要时间部分的当前瞬间