2012-09-12 78 views
4

我有一個查詢,它在執行時返回過去24小時的所有小時數。因此,如果您在上午10:55運行查詢,結果將從昨天上午11點到今天上午10點。獲取以特定方式訂購的查詢

這裏是我使用的查詢:

select to_char(trunc(a_date,'HH24'),'HH24') col_x, 
     type_name seriesname, 
     sum(a_measure_3) col_y 
from a_agg, 
    (select trunc(sysdate, 'hh')-1 POS from dual) 
where a_date >= POS 
and a_date <= POS + 1 
group by trunc(a_date,'HH24'), 
     type_name 
order by 2; 

而這正是我要尋找的輸出:

COL_X | SERIESNAME | COL_Y 
----------------------------------- 
11 | STATUS1 | 6715846 
12 | STATUS1 | 7064692 
13 | STATUS1 | 6821742 
14 | STATUS1 | 6241758 
15 | STATUS1 | 6364713 
16 | STATUS1 | 6762539 
17 | STATUS1 | 6200213 
18 | STATUS1 | 8479341 
19 | STATUS1 | 13346516 
20 | STATUS1 | 10107274 
21 | STATUS1 | 3716290 
22 | STATUS1 | 1321966 
23 | STATUS1 | 433947 
00 | STATUS1 | 200273 
01 | STATUS1 | 97429 
02 | STATUS1 | 81726 
03 | STATUS1 | 124943 
04 | STATUS1 | 284946 
05 | STATUS1 | 1360847 
06 | STATUS1 | 4250001 
07 | STATUS1 | 5840156 
08 | STATUS1 | 6666608 
09 | STATUS1 | 6949196 
10 | STATUS1 | 982411 

現在的問題是,有沒有辦法通過COL_X訂購得到這個特定的輸出,因爲我目前的order by 2不會總是返回上述結果。

回答

1

我想你想按實際日期列(a_date)進行排序。 它不允許你自己訂購,因爲它不在組中使用。要允許它,你需要以某種方式彙總日期。只需使用MAX或MIN即可。

所以簡而言之,就是ORDER BY MAX(a_date)

0

是的,你可以使用ORDER BY條款有點像裏面CASE聲明:

ORDER BY 
    CASE WHEN COL_X > 10 AND COL_X <= 23 
     THEN 0 
    ELSE 1 
    END 
0

試試這個:

只是by子句更改爲

Order by a_date 

由於a_date是你的約會列,它將按時間順序排列

3

不會order by trunc(a_date,'HH24')就足夠了嗎?您應該能夠按順序使用所有group-by值,而不僅僅是選擇列表表達式。