sql—基于大部分持续时间的时间段内的组时间段

bnlyeluc  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(393)

我在aws雅典娜使用presto-sql。
我将调用开始时间和结束时间分组。好的,我想给每个时间组分配一个15分钟的时间段。15分钟的时间间隔将从午夜开始,只是以15分钟为增量的一桶时间。所以,00:15,00:30,00:45,01:00,等等。我想根据时间段内的大部分时间分组来分配15分钟的时间段。
这是我想看的。

duration starttime                 endtime                   timeslot
60       2019-10-07 03:30:40.000   2019-10-07 03:31:40.000   2019-10-07 03:30:00.000
60       2019-10-07 04:00:10.000   2019-10-07 04:01:10.000   2019-10-07 04:00:00.000
60       2019-10-07 04:29:40.000   2019-10-07 04:30:40.000   2019-10-07 04:30:00.000

如果你看一下table上的第三行,我希望它落在后面 04:30 时隙,因为40秒的时间分组将在该时隙中,而只有20秒在该时隙中 04:15 时隙。
这是我想出的,但它只分配了一个时间段的基础上,在哪里 starttime 瀑布。

date_trunc('minute', starttime) - interval '1' minute * (minute(starttime) % 15) as timeslot

有人能帮我用我要的大多数逻辑和代码吗?

ttvkxqim

ttvkxqim1#

因为我关心的是大部分时间落在哪里。我需要确定时间分组的中点在哪里。因此,我用以下代码为中点创建了一列:

date_add('second', (duration/2), breakstart) as midpoint

结果如下:

duration starttime                 endtime                   timeslot                  midpoint
60       2019-10-07 03:30:40.000   2019-10-07 03:31:40.000   2019-10-07 03:30:00.000   2019-10-07 03:31:10.000
60       2019-10-07 04:00:10.000   2019-10-07 04:01:10.000   2019-10-07 04:00:00.000   2019-10-07 04:00:40.000
60       2019-10-07 04:29:40.000   2019-10-07 04:30:40.000   2019-10-07 04:30:00.000   2019-10-07 04:30:10.000

所以,我使用了和开始时相同的代码,只是我使用了中点而不是开始时间。这将显示时间分组的中间位置,并适当地分配时间段。

date_trunc('minute', midpoint) - interval '1' minute * (minute(midpoint) % 15) as timeslot

注意:我无法将mipoint代码放在date\u trunc代码中。我必须先创建中点列,然后调用它。如果有人能做这个清洁剂,请分享!

相关问题