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_interval | ACTION | count |
|---|---|---|
| 2018-03-16 00:00:00 | bought | 2 |
| 2018-03-16 00:00:00 | sold | 1 |
| 2018-03-16 00:20:00 | sold | 2 |
(注:你的期望输出里00:20:00的bought 1应该是笔误,原示例数据里这个区间没有bought记录哦)
内容的提问来源于stack exchange,提问作者Kijoo
相关产品推荐
相关产品推荐

