需要一些 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/