Java/SQL-如何以30分钟或1小时为间隔对时间进行分组



我需要一个解决方案来对输入时间进行分组,并显示相应的时间间隔和该时间间隔内的用户/记录计数例如

时间间隔计数

07:00 AM-07:30 24

下午12:30至下午13:26

我们如何在Java或SQL 中根据间隔对时间进行分组

我在sql中尝试了分组方式,并使用流进行LocalTime分组但我无法根据的时间间隔进行隔离

时间间隔计数

07:00:34 12

下午12:30:23

07:23:53 12

12:46:21 12

我只能使用sql/java(两种方法都试过了(获得上述格式的数据

以下是经典(算法(方法的代码片段,以及使用java流api的第二个方法:

// algorithmic approach
LocalDateTime[] times = Array.randomLocalDateTimes(5);
Array.print(times);
Map<Integer, Integer> counts = new HashMap<>();
for (LocalDateTime time : times) {
int hour = time.get(ChronoField.HOUR_OF_DAY);
int count = counts.getOrDefault(hour, 0);
counts.put(hour, count+1);
}
System.out.println(counts);

// java streams aproach
Map<Integer, Integer> counts2 = Arrays.stream(times)
.collect(Collectors.toMap(time -> time.get(ChronoField.HOUR_OF_DAY), hour -> 1, Integer::sum));
System.out.println(counts2);

// java streams for 30 minutes
Map<String, Integer> counts3 = Arrays.stream(times)
.collect(Collectors.toMap(time -> time.get(ChronoField.HOUR_OF_DAY) + ":" + (time.get(ChronoField.MINUTE_OF_HOUR) < 30 ? "00" : "30"),
interval -> 1,
Integer::sum));
System.out.println(counts3);

输出:

2022-10-25T18:06:14.245215, 2022-10-25T22:15:14.246607, 2022-10-25T19:29:14.246624, 2022-10-25T18:08:14.246635, 2022-10-25T10:21:14.246645
{18=2, 19=1, 22=1, 10=1}
{18=2, 19=1, 22=1, 10=1}
{10:00=1, 22:00=1, 19:00=1, 18:00=2}

假设您有不同的时间(无论数据类型如何(,并且需要每天24小时进行聚合。这意味着要托管24个bucket。

初始化一个由24个整数组成的数组,使其包含所有零。你时代的循环。对于他们中的每一个人,只需记下分钟,这样你就只剩下一天中的时间了。在数组中查找相应的int并增加值。

最后,只需打印你的数组,你就会看到一天中每小时你有多少次。

现在,当你想有30分钟的间隔时,只需将桶的数量增加到48个,而不是减少分钟数,就可以决定是在前半小时还是后半小时。

最新更新