Sql 如何按小时从oracle数据库中获取数据

Sql 如何按小时从oracle数据库中获取数据,sql,database,oracle,Sql,Database,Oracle,我的数据库中有一个表mytable,它的内容请求来自其他来源。此表中有一列为时间,用于存储收到请求时的日期和时间(例如2010/07/10 01:21:43)。现在我想从这个表中获取每天每小时的数据。意味着我希望数据库在一天中的每小时接收的请求数。e、 对于1点到2点,说计数是50,像这样。。我将在一天结束时运行此查询。因此,我将在一天中每小时收到一组请求 有人能帮我吗 我想要一个查询,因为我的数据库很大,所以获取数据所需的时间更少。 OMG Ponies以外的任何其他方法都可以回答。使用设置日

我的数据库中有一个表mytable,它的内容请求来自其他来源。此表中有一列为时间,用于存储收到请求时的日期和时间(例如2010/07/10 01:21:43)。现在我想从这个表中获取每天每小时的数据。意味着我希望数据库在一天中的每小时接收的请求数。e、 对于1点到2点,说计数是50,像这样。。我将在一天结束时运行此查询。因此,我将在一天中每小时收到一组请求

有人能帮我吗

我想要一个查询,因为我的数据库很大,所以获取数据所需的时间更少。

OMG Ponies以外的任何其他方法都可以回答。

使用设置日期时间列的格式,以便您可以按其分组以获得聚合函数:

  SELECT TO_CHAR(t.time, 'YYYY-MM-DD HH24') AS hourly,
         COUNT(*) AS numPerHour
    FROM YOUR_TABLE t
GROUP BY TO_CHAR(t.time, 'YYYY-MM-DD HH24')

为什么不创建另一个存储计数和日期的表呢。创建一个每小时运行的数据库作业,并将count和sysdate放入新表中。您的代码将只是查询新表

create table ohtertable_count (no_of_rows number, time_of_count date);
您的数据库作业每小时运行一次
insert into othertable_count 
select count(1), sysdate
from othertable;
插入到其他表\u计数
选择计数(1),sysdate
来自其他表
您将查询表othertable\u count,而不是查询原始表。

选择To\u char(您的\u列'YYYY-MM-DD HH24')作为小时,
SELECT To_char(your_column, 'YYYY-MM-DD HH24') AS hourly, 
       Count(*)                              AS numPerHour 
FROM   your_table 
WHERE  your_column > '1-DEC-18' 
       AND your_column < '4-DEC-18' 
GROUP  BY To_char(your_column, 'YYYY-MM-DD HH24') 
ORDER  BY hourly;
将(*)算作努姆普尔 从你的桌子上 您的专栏>2018年12月1日' 你的专栏<'2018年12月4日' 分组依据至字符(您的字符列“YYYY-MM-DD HH24”) 按小时订购;
@MAS1:对不起,我已经重新阅读了你的问题,我没有看到任何暗示需要联接的内容。@MAS1这不是联接,它使用的是表别名。如果您只查找当天的数据,可以在
FROM
groupby
子句之间添加
其中TRUNC(sysdate)和TRUNC(sysdate+1)之间的t.time
;或者,您可以将其参数化,以使用传入的日期。@Alex我想您的意思是(sysdate+1)那里(不是+10)@MAS1:如果您的表上的时间字段还没有索引,您应该添加一个索引(如果可以的话)。如果查询时间过长,请考虑表中当前数据的一个单独的分区。@ OMG:<代码>其中子句仍将使用索引限制为一天,并且避免需要获取匹配的记录的数据块(虽然我想我读到了某处的代码>计数(*)。
可以撤销其中的一些,并且
计数(1)
可能会更有效-有一天必须测试它)+1,谢谢你的建议..但是我不能创建另一个表。什么是“巨大的”,OMG Ponies提供的查询需要多长时间,你需要多长时间。谢谢大家,我在OMG小马的答案中做了一些小改动,得到了我的答案。