df-drills pandas · Polars · DuckDB SQL · DuckDB Relational 题目列表 登录

rolling 上下文

中等 23-polars-only Polars 专属 rollingtime-windowgroupby

对每条读数,统计同一传感器在它之前 3 小时内(含它自己)的读数情况。

  • 时间窗口为左开右闭 (ts − 3h, ts]:恰好早 3 小时的读数不算在内,与当前读数同一时刻的读数都算在内。
  • n:窗口内的读数行数(包括温度为 null 或坏读数的行)。
  • avg_temp、max_temp:窗口内 temperature 的平均值和最大值。-999 是坏读数,与 null 一样忽略;窗口内没有有效温度时为 null。不做舍入。
  • 每条读数输出一行;同一传感器同一时刻有多条读数时,它们的结果相同,都要输出。

输入

  • readings(sensor_id, ts, temperature, humidity)

输出

列为 sensor_id, ts, n, avg_temp, max_temp,行数与输入相同,行顺序不限。

输入表 (case base,共 2 个 case:base、edge)

readings iot/readings
#sensor_idstringtsdatetimetemperaturefloat64humidityfloat64
1 s01 2026-09-01 00:23:47 21.7 60.2
2 s01 2026-09-01 00:45:48 22.1 60.2
3 s01 2026-09-01 00:59:29 22.2 46.2
4 s01 2026-09-01 01:12:53 22.3 51.3
5 s01 2026-09-01 01:37:08 22.5 43.4
6 s01 2026-09-01 01:55:18 22.5 57.9
7 s01 2026-09-01 02:03:26 22.3 39.0
8 s01 2026-09-01 02:09:39 22.1 58.2
9 s01 2026-09-01 02:21:34 22.2 41.0
10 s01 2026-09-01 02:33:45 22.4 63.2
11 s01 2026-09-01 02:46:42 null 47.4
12 s01 2026-09-01 02:56:58 null 37.0
13 s01 2026-09-01 03:12:50 null 55.3
14 s01 2026-09-01 03:28:54 22.4 44.3
15 s01 2026-09-01 03:44:24 22.3 49.2
16 s01 2026-09-01 03:55:27 22.1 42.7
17 s01 2026-09-01 04:02:14 21.9 51.5
18 s01 2026-09-01 04:21:37 -999.0 46.3
19 s01 2026-09-01 04:28:05 22.4 63.7
20 s01 2026-09-01 04:40:12 22.4 57.7
显示前 20 行,共 600 行

期望输出 (case base,行顺序不限)

#sensor_idStringtsDatetime(time_unit='us', time_zone=None)nUInt32avg_tempFloat64max_tempFloat64
1 s01 2026-09-01 00:23:47 1 21.7 21.7
2 s01 2026-09-01 00:45:48 2 21.9 22.1
3 s01 2026-09-01 00:59:29 3 22.0 22.2
4 s01 2026-09-01 01:12:53 4 22.075 22.3
5 s01 2026-09-01 01:37:08 5 22.16 22.5
6 s01 2026-09-01 01:55:18 6 22.21666667 22.5
7 s01 2026-09-01 02:03:26 7 22.22857143 22.5
8 s01 2026-09-01 02:09:39 8 22.2125 22.5
9 s01 2026-09-01 02:21:34 9 22.21111111 22.5
10 s01 2026-09-01 02:33:45 10 22.23 22.5
11 s01 2026-09-01 02:46:42 11 22.23 22.5
12 s01 2026-09-01 02:56:58 12 22.23 22.5
13 s01 2026-09-01 03:12:50 13 22.23 22.5
14 s01 2026-09-01 03:28:54 13 22.3 22.5
15 s01 2026-09-01 03:44:24 14 22.3 22.5
16 s01 2026-09-01 03:55:27 14 22.3 22.5
17 s01 2026-09-01 04:02:14 14 22.27272727 22.5
18 s01 2026-09-01 04:21:37 14 22.27 22.5
19 s01 2026-09-01 04:28:05 15 22.28181818 22.5
20 s01 2026-09-01 04:40:12 15 22.27272727 22.5
21 s01 2026-09-01 05:00:34 15 22.20909091 22.4
22 s01 2026-09-01 05:20:40 14 22.16 22.4
23 s01 2026-09-01 05:38:35 13 22.06666667 22.4
24 s01 2026-09-01 05:50:56 13 22.05 22.4
25 s01 2026-09-01 06:08:54 13 22.05454545 22.4
26 s01 2026-09-01 06:17:13 13 22.075 22.4
27 s01 2026-09-01 06:32:24 13 22.075 22.4
28 s01 2026-09-01 06:47:54 13 22.05 22.4
29 s01 2026-09-01 06:54:59 14 22.07692308 22.4
30 s01 2026-09-01 07:08:46 13 22.10833333 22.4
31 s01 2026-09-01 07:23:15 13 22.11538462 22.4
32 s01 2026-09-01 07:31:06 13 22.09230769 22.4
33 s01 2026-09-01 07:43:14 13 22.1 22.5
34 s01 2026-09-01 08:02:20 13 22.14615385 22.5
35 s01 2026-09-01 08:19:29 14 22.18571429 22.7
36 s01 2026-09-01 08:31:02 14 22.27142857 22.9
37 s01 2026-09-01 08:52:46 13 22.39230769 22.9
38 s01 2026-09-01 09:11:43 13 22.42307692 22.9
39 s01 2026-09-01 09:30:35 13 22.49230769 23.2
40 s01 2026-09-01 09:52:30 12 22.6 23.2
41 s01 2026-09-01 10:01:01 12 22.65833333 23.2
42 s01 2026-09-01 10:18:05 12 22.76666667 23.6
43 s01 2026-09-01 10:35:49 11 22.95454545 23.6
44 s01 2026-09-01 10:59:34 11 23.04545455 23.6
45 s01 2026-09-01 11:20:50 10 23.2 23.6
46 s01 2026-09-01 11:37:31 10 23.22 23.6
47 s01 2026-09-01 11:44:01 11 23.19090909 23.6
48 s01 2026-09-01 12:04:19 11 23.19090909 23.6
49 s01 2026-09-01 12:21:41 11 23.21818182 23.6
50 s01 2026-09-01 12:41:03 11 23.20909091 23.6
显示前 50 行,共 600 行