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

4

4 に答える 4

3

order by trunc(a_date,'HH24')十分ではないでしょうか?select-list 式だけでなく、すべての group-by 値を order by で使用できる必要があります。

于 2012-09-12T10:24:39.507 に答える
1

実際の日付列 (a_date) で並べたいと思います。group by では使用されないため、単独で注文することはできません。それを可能にするには、何らかの方法で日付を集計する必要があります。MAX または MIN を使用するだけで機能します。

つまり、 ORDER BY MAX(a_date) だけです

于 2012-09-12T10:25:42.597 に答える
0

これを試して:

order by 句を次のように変更するだけです

Order by a_date

a_date は日付列であり、時系列順に並べられるため

于 2012-09-12T10:22:26.670 に答える
0

はい、次のような句CASE内でステートメントを使用できます。ORDER BY

 ORDER BY 
    CASE WHEN COL_X > 10 AND COL_X <= 23
         THEN 0
    ELSE 1
    END
于 2012-09-12T10:17:34.550 に答える