如何根据时间戳间隔对结果进行分组

时间:2014-06-30 08:50:48

标签: mysql

我有一个表,用于保存从发件人到接收者的带时间戳的消息,它看起来像:

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来管理这样的任务?

1 个答案:

答案 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)冲突。