MySQL查询同日期连续3条及以上amount>8.00的分钟级数据
解决同日期内连续分钟记录筛选问题
针对你的需求,核心思路是通过分组标识连续时间区间,再筛选出符合条件的记录组。以下是具体实现方案:
核心逻辑说明
- 先过滤出
amount > 8.00的有效记录; - 按日期分组,给每条记录生成递增行号,结合分钟级时间戳计算组ID——同一连续分钟区间的记录会得到相同的组ID;
- 统计每个组的记录数,筛选出记录数≥3的组,最终输出这些组内的所有记录。
MySQL 实现语句
WITH filtered_data AS ( SELECT date, time, amount, -- 按日期分组生成递增行号 ROW_NUMBER() OVER (PARTITION BY date ORDER BY time) AS rn, -- 转换为分钟级时间戳(便于计算连续区间) UNIX_TIMESTAMP(CONCAT(date, ' ', time)) DIV 60 AS minute_ts FROM your_table_name WHERE amount > 8.00 ), grouped_data AS ( SELECT date, time, amount, -- 计算组ID:连续分钟的记录会得到相同值 minute_ts - rn AS group_id FROM filtered_data ) SELECT g.date, g.time, g.amount FROM grouped_data g JOIN ( SELECT date, group_id, COUNT(*) AS record_count FROM grouped_data GROUP BY date, group_id HAVING record_count >= 3 ) valid_groups ON g.date = valid_groups.date AND g.group_id = valid_groups.group_id ORDER BY g.date, g.time;
性能优化建议
由于数据量达260万,建议给date、time、amount字段建立联合索引:
CREATE INDEX idx_date_time_amount ON your_table_name(date, time, amount);
该索引可大幅提升过滤和排序的效率,避免全表扫描。
内容的提问来源于stack exchange,提问作者Alexnl
相关产品推荐
相关产品推荐

