2013-02-11 94 views
0

我首先創建一個子查詢,以顯示按每天​​HOUR分組的最大值(complete_dt-create_dt)。然後,我每天都進行分組,因爲我想顯示每天最大值(按小時分組)。使用MAX函數和兩個GROUP BY語句時遇到問題

我得到的是所有天數的MAX值每一行中出現了:

 
max(TIMELENGTH) | DAY 
210.5   |  16 
210.5   |  17 
210.5   |  27 

這是我使用的查詢,我在做什麼錯:

select max(hours.timelength) TimeLength, TO_CHAR(trunc(t.create_dt), 'DD') DAY 
FROM ORDERS t, 
    (select round(avg(24 * 3600 * (m.complete_dt-m.create_dt)),1) TimeLength 
    from ORDERS m 
    GROUP BY TRUNC(m.create_dt, 'HH')) hours 
where t.order_status_id in (80) 
GROUP BY TO_CHAR(trunc(t.create_dt), 'DD') 

謝謝,

+0

您沒有加入這兩個表格。 – Taryn 2013-02-11 10:18:44

回答

0

這可能會給你以後的東西。

select max(hours.timelength) TimeLength, hours.Day 
FROM 
(
select 
round(avg(24 * 3600 * (m.complete_dt-m.create_dt)),1) TimeLength, 
TO_CHAR(trunc(t.create_dt), 'DD') Day, 
TRUNC(m.create_dt, 'HH') hours 
from ORDERS m 
where t.order_status_id in (80) 
GROUP BY TRUNC(m.create_dt, 'HH'), TO_CHAR(trunc(t.create_dt), 'DD') 
) hours 
GROUP BY hours.Day 

原始查詢有T和小時

+0

嗯,非常感謝。當我運行它時,我遇到了一個錯誤:FROM關鍵字找不到預期的地方。 (並且第7行的最後一個括號[小時前]突出顯示了錯誤,我試圖修復它,但沒有任何內容 – Honesta 2013-02-11 10:29:13

+0

oh .. extra paranthesis。 – 2013-02-11 10:33:28

+0

yes我修復了它,結果看起來很好,非常感謝。 – Honesta 2013-02-11 10:39:49

0

之間沒有加入我覺得你想要的東西,如:

select max(hours.timelength) as TimeLength, trunc(firstcreate_dt) as DAY 
FROM ORDERS t, 
    (select round(avg(24 * 3600 * (m.complete_dt-m.create_dt)),1) TimeLength, 
      min(create_dt) as firstcreate_dt 
     from ORDERS m 
     where t.order_status_id in (80) 
     GROUP BY TRUNC(m.create_dt, 'YYYY-MM-DD HH') 
    ) hours 
GROUP BY trunc(firstcreate_dt) 

你不想使用to_char(. . . , 'DD')因爲只有返回的當天月。

而且,在表達式to_char(trunc(t.create_dt), 'DD')中,trunc()是不必要的。

+0

謝謝,實際上我只需要幾天:)那就是爲什麼to_char(...,'DD')。謝謝trunc redudancy,我會把它拿出來。雖然我看到你的答案和@ElectricLlama答案有所不同。他還通過子查詢中的Days進行分組,我不確定這是否會帶來任何差異。 – Honesta 2013-02-12 08:21:37

+0

@hoesta。 。 。這兩個是相同的。他分別按天和小時分組。我把一個字段分成幾天和幾小時(這些字段也應該具有相同的性能)。該解決方案明確從子查詢中提取日期;這根據最小創建日期來計算它。該版本沒有問題,但月份除外。在幾個月的日子裏,似乎並不是大多數情況下的正確方法。 – 2013-02-12 14:06:15