Sql 为每个月递归选择两个字段 引产

Sql 为每个月递归选择两个字段 引产,sql,Sql,我使用的是FreeRadius,我想查询我的表radacct,并选择给定年份内的两个字段datetime字段,提供每月发送和接收的字节数总和 我的数据库布局 数据库数据 期望输出 我想有一个类似这样的查询,SQL查询只需要知道本例中的2013年,以及本例中的用户名admin username month total_bytes -------- ----- ----------- admin 04 9574456 admin 05 88679906

我使用的是FreeRadius,我想查询我的表radacct,并选择给定年份内的两个字段datetime字段,提供每月发送和接收的字节数总和

我的数据库布局 数据库数据 期望输出 我想有一个类似这样的查询,SQL查询只需要知道本例中的2013年,以及本例中的用户名admin

username   month  total_bytes
--------   -----  -----------
admin      04     9574456
admin      05     886799062
我的解决方案 我可能会用PHP实现这一点,在这种情况下,我设置了2013年,并使用一个简单的for循环每月执行12个查询

我的问题
我提出的解决方案可能不是最好的解决方案,因此我想知道是否只需一个查询就可以做到这一点?

一个简单的聚合就可以了

SELECT
    username, MONTH(start), SUM(bytes_send+bytes_received)
FROM
    MyTable
WHERE
     -- avoiding the YEAR function on a predicate
    start >= '20130101' AND start < '20140101'
    AND
    username = 'admin'
GROUP BY
    username, MONTH(start)

这将给出用户名、两个日期之间的时差以及字节总数。这是请求数据的最简单查询。添加一个WHERE,以便在必要时进一步限制您获得的数据。

工作完美,比我预期的要好!非常感谢你!
username   month  total_bytes
--------   -----  -----------
admin      04     9574456
admin      05     886799062
SELECT
    username, MONTH(start), SUM(bytes_send+bytes_received)
FROM
    MyTable
WHERE
     -- avoiding the YEAR function on a predicate
    start >= '20130101' AND start < '20140101'
    AND
    username = 'admin'
GROUP BY
    username, MONTH(start)
SELECT 
   username, TIMEDIFF(start,end), SUM(bytes_send + bytes_received)
FROM
   table
WHERE
   start>='20130101' AND start<'20140101'