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')不够吗?您应该能够按顺序使用所有分组值,而不仅仅是选择列表表达式。

于 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

是的,您可以CASEORDER BY子句中使用语句,例如:

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

试试这个:

只需将您的 order by 条款更改为

Order by a_date

由于 a_date 是您的日期列,它将按时间顺序排列

于 2012-09-12T10:22:26.670 回答