Oracle分组

时间:2014-12-29 06:00:33

标签: sql oracle group-by

我写了一个查询来获取一天中每小时收到的数据。

SELECT To_CHAR( A.req_start_time , 'DD/MM/YYYY HH24') as input , count(A.REQUEST_ID)
FROM ILBULK.SAS_RE_TASK_MESSAGE A,ILBULK.SAS_RE_REQUEST_MESSAGE
WHERE A.NE_TYPE = 'HLR'
LIKE '%Synchronous%'
AND A.REQUEST_ID = ILBULK.SAS_RE_REQUEST_MESSAGE.REQUEST_ID and A.REQ_START_TIME > to_DATE ('12/26/2014 00', 'MM/DD/YYYY HH24') and A.REQ_START_TIME < to_DATE('12/27/2014 00', 'MM/DD/YYYY HH24')
GROUP BY To_CHAR(A.REQ_START_TIME, 'DD/MM/YYYY HH24');

我得到了以下回复

26/12/2014 02   13823
26/12/2014 14   4681
26/12/2014 12   2939
26/12/2014 18   457
26/12/2014 03   34327
26/12/2014 04   15673
26/12/2014 19   28885
26/12/2014 06   70699
26/12/2014 10   10743

现在我想获得有关按升序排序的每一分钟的数据,我试图分割小时但不是工作。我该怎么做?

3 个答案:

答案 0 :(得分:2)

使用to_char(A.req_start_time , 'DD/MM/YYYY HH24:MI'),其中MI是分钟部分。将其添加到SELECT以及GROUP BY子句。

SELECT To_char(A.req_start_time, 'DD/MM/YYYY HH24:MI') AS input, 
       Count(A.request_id) 
FROM   ilbulk.sas_re_task_message A, 
       ilbulk.sas_re_request_message 
WHERE  A.ne_type = 'HLR' LIKE '%Synchronous%' 
       AND A.request_id = ilbulk.sas_re_request_message.request_id 
       AND A.req_start_time > To_date ('12/26/2014 00', 'MM/DD/YYYY HH24') 
       AND A.req_start_time < To_date('12/27/2014 00', 'MM/DD/YYYY HH24') 
GROUP  BY To_char(A.req_start_time, 'DD/MM/YYYY HH24:MI'); 

例如,

SQL> SELECT to_char(SYSDATE, 'DD/MM/YYYY HH24:MI') GRP_MIN
  2  FROM DUAL
  3  GROUP BY to_char(SYSDATE, 'DD/MM/YYYY HH24:MI')
  4  /

GRP_MIN
----------------
29/12/2014 11:50

SQL>

答案 1 :(得分:1)

您的查询似乎不包括任何日期/时间字符串中的分钟数。您可以尝试以下模式:

'DD/MM/YYYY HH24:MI' - where MI represents minutes

出于订购目的,您需要将输入字段转换回日期:

ORDER BY to_date(input, 'DD/MM/YYYY HH24:MI')

如果您使用日期模式YYYY / MM / DD HH24:MI,则不需要转换,因为字符串将以与日期/时间相同的顺序出现。在Oracle中,假定升序排序,但如果您愿意,可以在结尾处添加ASC。

如果你是在午夜后的几分钟之后,你将需要这样的东西:

TO_NUMBER(TO_CHAR(input, 'SSSSS'))/60

在上文中,SSSSS表示自午夜起的秒数 - 除以60分钟。

答案 2 :(得分:-1)

我自己已经弄清楚了。 :)这是新查询

SELECT To_CHAR( A.req_start_time , 'HH24:MI:SS') as input , count(A.REQUEST_ID)
FROM ILBULK.SAS_RE_TASK_MESSAGE A,ILBULK.SAS_RE_REQUEST_MESSAGE
WHERE A.NE_TYPE = 'HLR' 
--and ILBULK.SAS_RE_REQUEST_MESSAGE.PROTOCOL LIKE '%SAS%' --and ILINK.SAS_RE_REQUEST_MESSAGE.PROTOCOL LIKE '%Synchronous%'
AND A.REQUEST_ID = ILBULK.SAS_RE_REQUEST_MESSAGE.REQUEST_ID and A.REQ_START_TIME > to_DATE ('12/26/2014 00', 'MM/DD/YYYY HH24') and A.REQ_START_TIME < to_DATE('12/27/2014 00', 'MM/DD/YYYY HH24')
GROUP BY To_CHAR(A.REQ_START_TIME, 'HH24:MI:SS');