我有一组看起来像这样的数据。有没有办法只从今天的日期获取最大值而不使用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
答案 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>
。我不太清楚计算的是什么(我没有花太多时间来搞清楚)。