MySQL选择自上一个月某一天发生以来的所有行

MySQL选择自上一个月某一天发生以来的所有行,mysql,mariadb,Mysql,Mariadb,所以这个想法很简单,但我不知道怎么做,我也没有在网上找到任何有用的信息 我有一个使用MariaDB跟踪互联网数据使用情况的系统设置。我有一个数据上限,每个月13日重置。我希望能够显示当前周期的所有数据使用情况 MySQL可以做到这一点吗?(我将使用grafana显示数据) 编辑:很抱歉,我没有考虑包含表架构 create table network.data\u用法 ( 更新当前时间戳()时,时间戳默认当前时间戳()不为空, mac varchar(32)不为空, 下载bigint默认值0不为空

所以这个想法很简单,但我不知道怎么做,我也没有在网上找到任何有用的信息

我有一个使用MariaDB跟踪互联网数据使用情况的系统设置。我有一个数据上限,每个月13日重置。我希望能够显示当前周期的所有数据使用情况

MySQL可以做到这一点吗?(我将使用grafana显示数据)

编辑:很抱歉,我没有考虑包含表架构

create table network.data\u用法
(
更新当前时间戳()时,时间戳默认当前时间戳()不为空,
mac varchar(32)不为空,
下载bigint默认值0不为空,
上载bigint默认值0不为空
);

显然,时间场与这个问题最相关。上载和下载字段存储自上一个条目以来特定mac地址的总输入/输出字节。

基本上,您需要为当前日期计算每月的第13天。您可以使用

CURDATE()-间隔日(CURDATE())-13天
如果当前日期小于13,则只需减去一个月:

CURDATE()-间隔日(CURDATE())-13天-间隔如果(天(CURDATE())<13,1,0)个月
计算完之后,您可以对自该日期起的所有
下载
上传
值进行
SUM
计算:

选择SUM(下载)作为下载,
汇总(上传)为上传,
总计(下载+上传)
从数据使用
其中时间>=CURDATE()-间隔日(CURDATE())-13天-间隔如果(天(CURDATE())<13,1,0)个月
您还可以使用
GROUP BY
子句对每个
mac
值求和,例如

选择mac,
总计(下载)作为下载,
汇总(上传)为上传,
总计(下载+上传)
从数据使用
其中时间>=CURDATE()-间隔日(CURDATE())-13天-间隔如果(天(CURDATE())<13,1,0)个月
mac分组
如果您是按
mac
分组,还可以通过将
WITH ROLLUP
添加到
GROUP by
子句来生成总行:

选择合并(mac,'Total')作为mac,
总计(下载)作为下载,
汇总(上传)为上传,
总计(下载+上传)
从数据使用
其中时间>=CURDATE()-间隔日(CURDATE())-13天-间隔如果(天(CURDATE())<13,1,0)个月
按mac分组并进行汇总

这似乎工作得很好。谢谢大家!@布兰登3055很高兴听到!我很高兴能帮上忙。如果你不介意的话,我确实有一个相关的问题。根据你给我的信息,我找到了一种计算当前周期“进度”的方法,方法是将该周期的当前日期除以该周期的总天数。这似乎有效,但我只是想知道我是否忽略了一个更简单的选择@Brandon 3055您可以将周期中天数的计算简化为
天(最后一天(curdate()-如果(天(curdate())<13,1,0)个月,则为间隔时间)