我正在使用FreeRadius
,我想查询我的表格radacct
并在指定年份内选择两个字段(datetime
字段)并提供{{1}每月SUM
和bytes_send
。
bytes_received
fieldtype fieldname
--------- ----------
varchar username
datetime start
datetime end
bigint bytes_send
bigint bytes_received
我希望得到一个类似这样的查询(SQL查询只需知道年份(本例中为username start end bytes_send bytes_received
--------- ------------------- ------------------- ---------- --------------
admin 2013-04-22 22:14:34 2013-04-22 22:24:51 8723142 851314
admin 2013-05-14 11:50:50 2013-05-15 11:58:35 11073753 958437
admin 2013-05-14 14:36:24 2013-05-15 15:11:59 869125711 3152551
admin 2013-05-15 20:45:16 2013-05-15 20:47:11 2373753 114857
demo 2013-05-14 23:21:51 2013-05-15 05:32:20 59125919 3815816
)和用户名(本例中为2013
)
admin
我可能会用PHP做这件事,我设置了一年(在这种情况下为username month total_bytes
-------- ----- -----------
admin 04 9574456
admin 05 886799062
)并使用简单的for循环执行12次查询(每月一次)。
我提出的解决方案可能不是最佳解决方案,因此我想知道是否可以通过一个查询完成此操作?
答案 0 :(得分:2)
一个简单的聚合就可以了
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)
答案 1 :(得分:0)
SELECT
username, TIMEDIFF(start,end), SUM(bytes_send + bytes_received)
FROM
table
WHERE
start>='20130101' AND start<'20140101'
这将给出用户名,两个日期之间的时差和字节总和。这是请求数据的最简单的查询。添加WHERE以进一步限制您获得的数据。