2011-09-19 119 views
2

需要一些SQL幫助。sql查看最大值,每小時計算一次

我有以下的報告,我需要建立的,但我非常想嘗試使用SQL腳本,而不需要有運行每隔一小時等

業務問題的程序構建它,我們正在解決的問題基本上是按照每小時計算產品在給定周內佔用的最大位置數量。

我知道我可以通過每小時運行一個程序來計算金額並將其插入表中。然後,我會在本週結束時查詢此表,並查看哪一天的哪個小時數最多。

理想情況下,我想在不使用程序的情況下執行此操作。我寫了SQL,可以在任何時間點告訴我數字(在週一10-11AM的時間之間)。

而不是複製和粘貼這個SQL腳本24 x 7次(每天1小時1次),還有什麼我可以通過SQL腳本在這裏做的嗎? 我可以創建一個每天都有維護表,並列出時間段(例如,列將爲:day,hour_start,hour_end),將其加入到我的查詢中並使用max函數?

我很確定它不能通過strait SQL來完成,但我不是一個運行時間依賴程序的粉絲(例如,如果服務器要離線)。

任何意見讚賞!

+0

我相信這是可以做到的,但你應該添加有關數據結構的詳細信息。 –

回答

5

假設的數據結構類似:

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; 
+0

哇,它看起來會實際上工作。我明天在工作中放棄它,但它看起來不錯! – Lock

相關問題