Google Sheets:按每日各小时统计HEATING出现次数
解决Google表格中按每日小时统计HEATING出现次数的问题
方案一:使用QUERY函数(一步到位)
直接用QUERY函数完成分组统计,无需辅助列,适合快速实现需求:
=QUERY(A:B, "SELECT DATE(A), HOUR(A), COUNT(A) WHERE B = 'HEATING' GROUP BY DATE(A), HOUR(A) ORDER BY DATE(A), HOUR(A)", 1)
参数说明:
DATE(A):从时间戳列(A列)提取日期部分HOUR(A):从时间戳列提取小时数WHERE B = 'HEATING':筛选出消息列(B列)为HEATING的行GROUP BY DATE(A), HOUR(A):按日期+小时维度分组COUNT(A):统计每组内HEATING的出现次数- 最后一个参数
1表示数据区域包含表头行
如果需要将日期和小时合并为更直观的格式(如2024-05-20 14:00),可以修改QUERY语句:
=QUERY(A:B, "SELECT CONCAT(DATESTRING(A), ' ', TEXT(HOUR(A), '00')&':00'), COUNT(A) WHERE B = 'HEATING' GROUP BY DATE(A), HOUR(A) ORDER BY DATE(A), HOUR(A)", 1)
方案二:辅助列+UNIQUE+COUNTIFS组合
如果更习惯分步操作,可通过以下步骤实现:
- 添加辅助列:在C2单元格输入公式,下拉填充,提取格式化的“日期+小时”字符串(解决你之前用LEFT提取的问题——日期格式的时间戳是数字存储,LEFT提取的是数字字符而非日期字符串):
=TEXT(A2, "yyyy-MM-dd HH:00")
- 提取唯一分组项:在E2单元格输入公式,获取所有出现过HEATING的日期+小时组合:
=UNIQUE(FILTER(C:C, B:B="HEATING"))
- 统计次数:在F2单元格输入公式,下拉填充,统计每个分组内HEATING的出现次数:
=COUNTIFS(C:C, E2, B:B, "HEATING")
为什么之前的方法失效?
你用LEFT提取时间戳前13位的问题在于:Google表格中日期时间类型的单元格实际存储为数字(代表从1900年起的天数+小数时间),LEFT提取的是这个数字的前13位,而非你看到的日期字符串的前13位,导致分组逻辑错误。改用TEXT函数格式化日期时间为固定格式的字符串,才能准确按日期+小时分组。
内容的提问来源于stack exchange,提问作者Joe S
相关产品推荐
相关产品推荐

