如何在MySQL中统计各交易日指定DateTime范围内的数据出现次数
MySQL按自定义交易日统计数据量方案
核心实现逻辑
你定义的交易日统计区间为前一日18:00至当日17:00,只需要将每条记录的时间字段加6小时后取日期值,即可将区间内所有记录统一归属到对应交易日,再分组统计即可。
适用场景:仅统计有数据的交易日
如果不需要输出无数据的交易日(无数据的日期不展示),直接用以下SQL,替换为你实际的表名即可:
SELECT DATE(DATE_ADD(`date`, INTERVAL 6 HOUR)) AS 交易日, COUNT(*) AS 数据条数 FROM 你的表名 GROUP BY 交易日 ORDER BY 交易日;
逻辑验证
- 前一日18:00的时间加6小时刚好到当日0点,归属到当日交易日
- 当日17:00的时间加6小时为当日23点,同样归属到当日交易日
完全匹配你定义的统计区间规则。
适用场景:需要输出所有交易日(含无数据的日期)
如果需要展示所有交易日,无数据时计数为0,你需要先准备一张交易日历表trade_calendar,表中仅需存储每个交易日的日期字段trade_date,再通过左连接实现统计:
SELECT c.trade_date AS 交易日, COUNT(t.`date`) AS 数据条数 FROM trade_calendar c LEFT JOIN 你的表名 t ON DATE(DATE_ADD(t.`date`, INTERVAL 6 HOUR)) = c.trade_date GROUP BY c.trade_date ORDER BY c.trade_date;
内容的提问来源于stack exchange,提问作者Yuan
相关产品推荐
相关产品推荐

