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