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

PostgreSQL按10分钟时间间隔统计买入卖出物品数量

嘿,我来帮你搞定这个按10分钟间隔统计买卖数量的问题!

首先,核心思路是把每条记录的时间截断到所属的10分钟区间起始点,然后按这个区间和ACTION类型分组统计数量。下面针对不同数据库给出具体实现:

假设你用的是MySQL

可以用两种方式处理时间区间:

方法1:通过调整分钟数生成区间

SELECT
  -- 把时间调整到10分钟区间的起始点
  DATE_FORMAT(
    TIMESTAMPADD(MINUTE, FLOOR(MINUTE(date_action)/10)*10 - MINUTE(date_action), date_action),
    '%Y-%m-%d %H:%i:00'
  ) AS time_interval,
  ACTION,
  COUNT(*) AS count
FROM your_table_name  -- 替换成你的表名
GROUP BY time_interval, ACTION
ORDER BY time_interval, ACTION;

方法2:利用时间戳计算更简洁

SELECT
  -- 把时间戳按10分钟(600秒)取整后转回时间格式
  FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(date_action)/(10*60))*(10*60)) AS time_interval,
  ACTION,
  COUNT(*) AS count
FROM your_table_name
GROUP BY time_interval, ACTION
ORDER BY time_interval, ACTION;

如果是其他数据库

  • PostgreSQL:
SELECT
  date_trunc('minute', date_action) - INTERVAL '1 minute' * (EXTRACT(minute FROM date_action) % 10) AS time_interval,
  ACTION,
  COUNT(*) AS count
FROM your_table_name
GROUP BY time_interval, ACTION
ORDER BY time_interval, ACTION;
  • SQL Server:
SELECT
  DATEADD(MINUTE, DATEDIFF(MINUTE, 0, date_action)/10*10, 0) AS time_interval,
  ACTION,
  COUNT(*) AS count
FROM your_table_name
GROUP BY DATEADD(MINUTE, DATEDIFF(MINUTE, 0, date_action)/10*10, 0), ACTION
ORDER BY time_interval, ACTION;

验证你的示例数据

用上面的MySQL方法跑你的示例数据,会得到:

time_intervalACTIONcount
2018-03-16 00:00:00bought2
2018-03-16 00:00:00sold1
2018-03-16 00:20:00sold2

(注:你的期望输出里00:20:00的bought 1应该是笔误,原示例数据里这个区间没有bought记录哦)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:11:58