sql 查看最大值,每小时计算

标签 sql oracle

需要一些 SQL 方面的帮助。

我需要构建以下报告,但理想情况下我想尝试使用 SQL 脚本构建它,而不是必须有一个每小时运行一次的过程等。

我们要解决的业务问题基本上是计算产品在给定一周内占用的最大位置数量,按小时计算。

我知道我可以通过每小时运行一个程序来计算金额并将其插入表中来做到这一点。然后,我会在一周结束时查询该表,看看哪一天的哪个小时的数字最多。

理想情况下,我想在不使用过程的情况下执行此操作。我编写了 SQL,它可以告诉我任何时间点的数字(比如周一上午 10 点到 11 点之间)。

除了 24 x 7 次复制并粘贴此 SQL 脚本(一天中每小时 1 次)之外,我还可以通过 SQL 脚本执行其他操作吗? 我可以创建一个列出每天和时间段的维护表(例如,列为:day、hour_start、hour_end),将其加入到我的查询中并使用 max 函数吗?

我很确定这不能通过 strait SQL 来完成,但我不喜欢运行依赖于时间的程序(例如,如果服务器离线怎么办)。

任何建议表示赞赏!

最佳答案

假设这样的数据结构:

create table room_usage ( 
   roomnumber number(6),
   occupied_by varchar2(20),
   startdate date,
   enddate date
);

您可以这样查询每小时占用的房间数:

with datgen as 
  (select to_date('2008-09-19','yyyy-mm-dd')+(rownum-1)/24 d 
     from dual
     connect by rownum<=168)
select d, (select count(*) from room_usage
             where startdate<=datgen.d
               and enddate>=datgen.d) occupied
  from datgen;

to_date('2008-09-19','yyyy-mm-dd') 是查询的开始日期,168 是您想要的小时数已报道。

编辑:要获取最大数字和该数字的最新日期,请使用

with datgen as 
  (select to_date('2008-09-19','yyyy-mm-dd')+(rownum-1)/24 d 
     from dual
     connect by rownum<=168),
occ_count as (     
  select d, (select count(*) from room_usage
               where startdate<=datgen.d
                 and enddate>=datgen.d) occupied
    from datgen)
select d, occupied from (select * from occ_count order by occupied desc, d desc)
 where rownum=1;

关于sql 查看最大值,每小时计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7467247/

相关文章:

sql - 根据其他查询的结果运行 Select 查询

sql - 如何从 T-SQL 中的表中选择前 N 行?

sql - 如何将旧的连接代码行转换为新的连接语法?

mysql - 错误消息 "ORA-02270: no matching unique or primary key for this column-list"

database - ORACLE 数据库 |删除缺少数据文件的表空间

java - ClassNotFoundException 和 ClassDefNotFoundException 有什么区别

spring - JPA Hibernate + UCP Oracle。从 save 方法执行的查询不使用表的索引

mysql - 我可以获得 MySQL 的负载百分比或预计执行时间吗?

mysql中使用正则表达式进行mysql查询

sql - 在 SQL 2005 中使用一个命令将多行插入临时表