如何按日统计发送给不同接收者的消息数量?
按日统计不同接收者的消息数量实现方案
嘿,针对你要按日统计发送给不同接收者的消息数量这个需求,我结合你给出的messages数据表结构,整理了几种实用的实现方法,直接就能落地:
核心SQL实现(MySQL为例)
最基础的思路是把时间戳转换为日期格式,然后按「日期 + 接收者ID」分组统计消息条数,SQL代码如下:
SELECT DATE(FROM_UNIXTIME(date_time)) AS message_date, -- 将时间戳转为日期格式 receiver_id, COUNT(id) AS message_count -- 统计当日发给该接收者的消息总数 FROM messages GROUP BY message_date, receiver_id -- 按日期和接收者维度分组 ORDER BY message_date DESC, message_count DESC; -- 按日期倒序、数量倒序排列,方便查看最新数据
扩展场景1:指定发送者统计
如果只需要统计某一个特定发送者的每日消息分发情况,只需加上WHERE条件过滤发送者ID即可:
SELECT DATE(FROM_UNIXTIME(date_time)) AS message_date, receiver_id, COUNT(id) AS message_count FROM messages WHERE sender_id = 1 -- 替换为你要统计的目标发送者ID GROUP BY message_date, receiver_id ORDER BY message_date DESC, message_count DESC;
扩展场景2:显示接收者名称(关联用户表)
如果你的系统有users表存储用户信息,还可以关联查询显示接收者的用户名,让统计结果更直观:
SELECT DATE(FROM_UNIXTIME(m.date_time)) AS message_date, u.username AS receiver_name, -- 显示接收者用户名 COUNT(m.id) AS message_count FROM messages m JOIN users u ON m.receiver_id = u.id -- 关联用户表匹配用户名 GROUP BY message_date, u.id, u.username ORDER BY message_date DESC, message_count DESC;
其他数据库适配说明
如果你的数据库不是MySQL,只需调整时间戳转日期的函数即可:
- PostgreSQL:用
TO_TIMESTAMP(date_time)::DATE替代DATE(FROM_UNIXTIME(date_time)) - SQL Server:用
CONVERT(DATE, DATEADD(SECOND, date_time, '1970-01-01'))进行转换
内容的提问来源于stack exchange,提问作者Martin AJ
相关产品推荐
相关产品推荐

