我有一个带有“hit_timestamp”列的表,带有时间戳数据类型。 以下是一些价值观。
20-MAR-17 00.00.00.000000000
20-MAR-17 00.03.53.000000000
20-MAR-17 00.01.16.000000000
20-MAR-17 00.07.32.000000000
20-MAR-17 00.18.36.000000000
20-MAR-17 00.16.12.000000000
我想在10分钟内分组
time_bucket no_of_records
---------- ---------
"000000_000010" 4
"000011_000020" 2
答案 0 :(得分:3)
每隔10分钟,最简单的方法是获取日期的字符串格式,并删除2位数分钟部分第一个数字右侧的任何内容。因此,StopWatchLoop<string>(getElementText, myXpath, Content.Text);
将被剥夺至20-03-17 00.18.36
。这将成为分组的价值。出于显示目的,您可以向其添加20-03-17 00.1
以表示存储桶的下限,并为{> 1>添加0.00
。
现在,将时间戳转换为字符串的功能在不同的数据库引擎中是不同的。
对于Oracle,它看起来像这样:
9.59
输出:
select substr(to_char(dat, 'YY-MM-DD HH24.MI'), 1, 13) || '0.00' bucket_start,
substr(to_char(dat, 'YY-MM-DD HH24.MI'), 1, 13) || '9.59' bucket_end,
count(*)
from mytable
group by substr(to_char(dat, 'YY-MM-DD HH24.MI'), 1, 13)
order by 1
答案 1 :(得分:1)
你可以将hti_teimstamp向下舍入到每10分钟的间隔,然后再按一个组进行分组。
“2017-03-20 00:03:53.0000000”成为“2017-03-20 00:00:00.000”
“2017-03-20 00:18:36.0000000”成为“2017-03-20 00:10:00.000”
select dateadd(minute, datediff(minute, 0, hit_timestamp)/10*10 ,0) as time_bucket, count(1) as no_of_records
from #temp
group by dateadd(minute, datediff(minute, 0, hit_timestamp)/10*10 ,0)