需要一些SQL方面的帮助
我有以下报告,我需要构建,但我理想情况下想尝试和构建它使用SQL脚本,而不是有一个过程,每小时运行等。
我们正在解决的业务问题基本上是计算给定一周内产品占用的最大位置,按小时计算。
我知道我可以通过每小时运行一个程序来计算数量并将其插入到表中来做到这一点。然后,我将在一周结束时查询该表,并查看哪一天的哪个小时有最大的数字。
理想情况下,我想在不使用过程的情况下做到这一点。我已经写了SQL,可以告诉我在任何时间点的数字(比如周一上午10点到11点之间)。
而不是复制和粘贴这个SQL脚本24 × 7次(一天中的每小时1次),还有别的东西我可以通过SQL脚本在这里做吗?我可以创建一个维护表,每天,时间段列出(例如列将是:日,hour_start, hour_end),加入到我的查询和使用max函数?
我很确定它不能通过狭窄的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;