我有一个表,用于保存从发件人到接收者的带时间戳的消息,它看起来像:
mes timestamp sender receiver
10 2014-04-13 12:22:25.000 1 72
10 2014-04-13 12:22:25.000 1 91
10 2014-04-13 12:22:25.000 1 58
16 2014-02-20 20:09:06.000 3 35
16 2014-02-20 20:09:06.000 3 54
17 2014-03-05 14:55:28.000 1 65
18 2014-03-07 14:55:28.000 2 97
19 2014-03-09 14:55:28.000 2 97
我的表中包含300万行这样的行,我正在尝试根据时间戳间隔对结果进行分组,计算每对发送方 - 接收方之间每个月的消息数。类似的东西:
timestamp sender receiver count
2014-04 1 72 1
2014-04 1 91 1
2014-04 1 58 1
2014-02 3 35 1
2014-02 3 54 1
2014-03 1 65 1
2014-03 2 97 2
我真的不知道如何在mysql中指定我的子句,所以我为没有提供我的无法工作代码的片段而道歉......我应该使用某些东西作为开关控件并手动指定时间间隔吗?或者是否有一些更具体的mysql来管理这样的任务?
答案 0 :(得分:2)
这是一个非常简单的GROUP BY
,有多个级别:
SELECT CONCAT(YEAR(tstamp),'-',MONTH(tstamp)) as tstamp, sender, receiver, COUNT(*) AS cnt
FROM yourtable
GROUP BY YEAR(tstamp), MONTH(tstamp),sender,receiver;
我使用tstamp
作为“timestamp”的字段名称,以避免与保留字(timestamp
)冲突。