2015-12-15 32 views
0

我在我的表中有一个time_part列,它的时间格式像13:24。我想按每10分钟的time_part进行分组。我如何将时间分组10分钟。ORACLE - Group By Ten Minutes

下面是查询:

SELECT substr(tran_time, 1, 2) || ':' || substr(tran_time, 3, 2) as time_part, recon_date

这是我的表和tran_time被= 'HHMMSS':

time_part tran_time recon_date data 
10:14  101425 13/12/2015 a 
22:29  222939 13/12/2015 b 
22:23  222342 13/12/2015 x 
00:46  004615 13/12/2015 d 
16:22  162259 13/12/2015 e 
12:13  121344 13/12/2015 f 
12:14  121410 13/12/2015 g 
12:10  121008 13/12/2015 b 
21:17  211732 13/12/2015 f 
20:25  202511 13/12/2015 r 

实施例输出应该是这样的

trantime count(*) 
000101  5 
001101  4 
002101  13 
. 
. 
. 
230101  5 
231101  23 
+1

提取分钟部分,并除以10. – jarlh

+0

'TIME_PART'和'RECON_DATE'是否为字符串值?如果不是,为什么要将它们分开? –

+0

time_part的数据类型是char,recon_date的数据类型是date。 – serdanarik

回答

1

提取派生表中的小时加10分钟部分。然后做GROUP BY外部表:

select 10_min_part, count(*) 
from 
(
SELECT substr(tran_time, 1, 3) as 10_min_part 
from tablename 
) dt 
group by 10_min_part 

在选择列表中,您可以Concat的00110_min_part。 (现在我不记得甲骨文请问是怎么...)

+0

但是OP表示'recon_date'是一个DATE数据类型。这意味着'substr'不是必需的,只需在日期使用'TO_CHAR'。 –

0
  • 首先,这是一个不好的设计来存储单独时间部分字符串

  • 其次,日期总是有日期和时间元素。您所需要做的就是从日期中提取时间部分,并根据需要使用TO_CHAR和所需的格式型号

在您的评论说,time_part's data type is char , recon_date's data type is date,这意味着,recon_date有日期和时间元素。因此,您不需要SUBSTR,只需在日期列中使用TO_CHAR即可。

SELECT TO_CHAR(recon_date, 'mi'), COUNT(*) 
FROM your_table 
GROUP BY TO_CHAR(recon_date, 'mi');