查询:
第一个
从上面的查询中,我们每1分钟得到一次结果,我们从给定的时间戳开始,每5分钟寻找一次数据总和。
预期结果:
+-----------+-----------+----------+
| Timestamp | Counts1 | Counts2 |
+-----------+-----------+----------+
| 01:05 | 1125 | 302 |
| 01:10 | 750 | 182 |
| 01:15 | 1030 | 187 |
| 01:20 | 1340 | 265 |
+-----------+-----------+----------+
有人能帮忙吗
已尝试以下操作:
select to_char(date + interval '5' minute, 'HH24:MI') as Timestamp,
count(case when type = 5 then 1 end) as Counts1,
count(case when type = 6 then 1 end) as Counts2,
from data
where date >= to_date('2022-10-27 01:00', 'YYYY-MM-DD HH24:MI')
and date <= to_date('2022-10-27 01:20', 'YYYY-MM-DD HH24:MI')
and type IN (5,6)
group by to_char(date + interval '5' minute, 'HH24:MI')
order by to_char(date + interval '5' minute, 'HH24:MI')
下面是我们得到的结果:
+-----------+-----------+----------+
| Timestamp | Counts1 | Counts2 |
+-----------+-----------+----------+
| 01:05 | 125 | 5 |
| 01:06 | 130 | 10 |
| 01:07 | 140 | 12 |
| 01:08 | 150 | 35 |
| 01:09 | 160 | 47 |
| 01:10 | 170 | 78 |
| 01:11 | 180 | 125 |
| 01:12 | 190 | 5 |
| 01:13 | 210 | 10 |
| 01:14 | 220 | 12 |
| 01:15 | 230 | 35 |
| 01:16 | 240 | 47 |
| 01:17 | 260 | 78 |
| 01:18 | 270 | 125 |
| 01:19 | 280 | 5 |
| 01:20 | 290 | 10 |
+-----------+-----------+----------+
我们正在寻找每5分钟间隔的总和,预期结果如下:
+-----------+-----------+----------+
| Timestamp | Counts1 | Counts2 |
+-----------+-----------+----------+
| 01:05 | 1125 | 302 |
| 01:10 | 750 | 182 |
| 01:15 | 1030 | 187 |
| 01:20 | 1340 | 265 |
+-----------+-----------+----------+
4条答案
按热度按时间t0ybt7op1#
您可以使用
CONNECT BY
来产生周期:可能不是最佳解决方案,但它可以得到您想要的结果。
8zzbczxx2#
使用您的示例数据:
...您可以以5分钟为一个步骤创建CTE:
......并将数据与CTE连接,按STEP分组并求和......
结果应该是:
| 时间戳|总和_1|总和_2|
| - -|- -|- -|
| 01点05分|小行星1125| 302个|
| 01点10分|七百五十人|一百八十二|
| 01点15分|小行星103|一百八十七|
| 01点20分|小行星1340|二百六十五|
如果你想每10分钟做一次,那么只需将CTE的内部连接部分更改为如下所示:
...在这种情况下,结果将是:
| 时间戳|总和_1|总和_2|
| - -|- -|- -|
| 01点10分|小行星1875|四百八十四人|
| 01点20分|小行星2370|四百五十二|
此致。
t1qtbnec3#
使用width_bucket函数分成5分钟的间隔。然后,将时段数乘以时段大小加到开始间隔。需要从时段数中减去1,因为第一个时段将是时段数1。
也可以达到同样的结果没有函数。不需要计算桶数与此方法。
jw5wzhpr4#
也许这能帮上忙。