You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现时间段筛选?如何查询24小时内完成行程的最高数量?

针对小时级时间戳表格的三类需求实现方案

1. 时间段筛选

直接通过WHERE子句对时间戳字段进行范围过滤,示例SQL(假设表名为trip_data,时间戳字段为timestamp_hour):

SELECT *
FROM trip_data
WHERE timestamp_hour BETWEEN '2023-10-01 00:00:00' AND '2023-10-07 23:00:00';

如果是业务系统中动态传入起止时间,建议使用参数化查询避免SQL注入风险。

2. 查询连续y小时内的x值

假设x是需要统计的数值字段(如里程、时长等),分两种场景实现:

  • 实时滑动窗口统计:用窗口函数计算每个时间点往前y小时内的x值汇总(以求和为例):
SELECT timestamp_hour,
       x,
       SUM(x) OVER (ORDER BY timestamp_hour 
                    RANGE BETWEEN INTERVAL 4 HOUR PRECEDING AND CURRENT ROW) AS continuous_4h_x_total
FROM trip_data;

将4 HOUR替换为你需要的y HOUR即可。

  • 枚举所有连续y小时区间:通过自连接生成所有可能的连续y小时区间,并统计区间内的x值:
SELECT t1.timestamp_hour AS interval_start,
       t1.timestamp_hour + INTERVAL y HOUR AS interval_end,
       SUM(t2.x) AS interval_x_total
FROM trip_data t1
JOIN trip_data t2 
  ON t2.timestamp_hour >= t1.timestamp_hour 
  AND t2.timestamp_hour < t1.timestamp_hour + INTERVAL y HOUR
GROUP BY t1.timestamp_hour;

3. 找出24小时内完成行程的最高数量

方法1:窗口函数实现(推荐,效率更高)

先按小时统计行程数,再用滑动窗口计算24小时滚动总和,最后取最大值:

WITH hourly_trip_counts AS (
    SELECT timestamp_hour,
           COUNT(trip_id) AS hourly_trip_num
    FROM trip_data
    GROUP BY timestamp_hour
),
rolling_24h_stats AS (
    SELECT timestamp_hour,
           SUM(hourly_trip_num) OVER (ORDER BY timestamp_hour 
                                   RANGE BETWEEN INTERVAL 23 HOUR PRECEDING AND CURRENT ROW) AS rolling_24h_trips
    FROM hourly_trip_counts
)
SELECT MAX(rolling_24h_trips) AS max_24h_trip_count
FROM rolling_24h_stats;

方法2:自连接实现(兼容不支持窗口函数的老版本数据库)

SELECT COUNT(t2.trip_id) AS max_24h_trip_count
FROM trip_data t1
JOIN trip_data t2 
  ON t2.timestamp_hour >= t1.timestamp_hour 
  AND t2.timestamp_hour < t1.timestamp_hour + INTERVAL 24 HOUR
GROUP BY t1.timestamp_hour
ORDER BY max_24h_trip_count DESC
LIMIT 1;

内容的提问来源于stack exchange,提问作者OranC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:45:26