MySQL统计最近7天的数据

2023-12-08

我有以下架构。

表票

+------------------+--------------+------+-----+---------------------+----------------+
| Field            | Type         | Null | Key | Default             | Extra          |
+------------------+--------------+------+-----+---------------------+----------------+
| id               | int(10)      | NO   | PRI | NULL                | auto_increment |
| aid              | varchar(10)  | NO   |     |                     |                |
| ip               | varchar(100) | NO   |     |                     |                |
| host             | varchar(200) | NO   |     |                     |                |
| timestamp        | varchar(20)  | NO   |     | 0000-00-00 00:00:00 |                |
| user             | tinytext     | NO   |     | NULL                |                |
| userid           | int(10)      | NO   |     | 0                   |                |
+------------------+--------------+------+-----+---------------------+----------------+

在这里,我想获取过去 7 天内每一天的每项援助的计数,其中“0”表示没有投票支持援助的日期。这里的时间戳是unix时间戳。

非常感谢任何帮助。


MySQL 没有递归功能,因此您只能使用 NUMBERS 表技巧 -

  1. 创建一个仅保存递增数字的表 - 使用 auto_increment 很容易做到:

    DROP TABLE IF EXISTS `example`.`numbers`;
    CREATE TABLE  `example`.`numbers` (
      `id` int(10) unsigned NOT NULL auto_increment,
       PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
  2. 使用以下命令填充表:

    INSERT INTO NUMBERS
      (id)
    VALUES
      (NULL)
    

    ...您需要的任意多个值。

  3. Use DATE_ADD构建日期列表,根据 NUMBERS.id 值增加天数。将“2010-01-01”和“2010-01-02”替换为各自的开始日期和结束日期(但使用相同的格式,YYYY-MM-DD HH:MM:SS)。在此示例中,我从 CURRENT_DATE 中减去 NUMBERS.id 值,以获取上周的连续日期值列表 -

    SELECT x.dt
      FROM (SELECT DATE_SUB(CURRENT_DATE, INTERVAL (n.id - 1) DAY) AS dt
              FROM numbers n
             WHERE n.id <= 7 ) x
    
  4. 根据日期时间部分左连接到数据表。

       SELECT x.dt,
               COUNT(v.aid) AS num
         FROM (SELECT DATE_SUB(CURRENT_DATE, INTERVAL (n.id - 1) DAY) AS dt
                 FROM numbers n
                WHERE n.id <= 7 ) x
    LEFT JOIN VOTES v ON DATE(FROM_UNIXTIME(v.timestamp)) = DATE(x.dt)
     GROUP BY x.dt
     ORDER BY x.dt
    

为什么是数字而不是日期?

简单 - 可以根据数字生成日期,就像我提供的示例一样。它还意味着使用单个表,而不是每种数据类型一个表。

之前:

  SELECT DATE(FROM_UNIXTIME(v.timestamp)) AS dt,
         COUNT(v.aid)
    FROM VOTES v
   WHERE DATE(FROM_UNIXTIME(v.timestamp)) BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
                                              AND CURRENT_DATE
GROUP BY DATE(FROM_UNIXTIME(v.timestamp))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL统计最近7天的数据 的相关文章

随机推荐

  • php - 如何打印这个多维数组? [复制]

    这个问题在这里已经有答案了 假设我有以下数组 Array 1284487200 gt Array title gt first title link gt http 3A 2F 2Fexample1 com 1261271380 gt Ar
  • 数组类型列 Spark 数据框中不区分大小写的搜索

    我有如下 Spark 数据框 col1 words An An attractive thin low profile attractive An attractive thin low profile
  • 使用 VBA 刷新单个查询的最佳选择

    我有一本包含 4 6 个查询的工作簿 我只想使用 VBA 刷新 6 个查询中的 1 个 我的问题是 我使用的是下面最快的选项吗 不 我不想在 Excel 中使用 全部刷新 刷新 按钮 我需要将其包含在子项中 CODE ThisWorkboo
  • 如何在PyQt5中使用QtWebEngine createWindow

    我正在尝试制作一个包含 QWebEngineView 的窗口 现在我希望浏览器能够处理创建窗口或 blank 类型触发器 或者专门在需要时在新窗口中打开 URL 在下面的代码中 当浏览器需要创建窗口时 会调用 createwindow 但不
  • Lua中计算字符串转换为int

    我正在尝试将包含多个数字的字符串转换为单个 int 像这样 x 5 5 amount of numbers is not constant y tonumber x print y 这样做的结果是nil虽然应该是10 整数 我解决这个问题的
  • MariaDB 10.2 和 Openssl 1.1.0e 出现“不完整类型 MD5_CONTEXT”错误

    我无法在 CentOS 7 中构建启用 RocksDB 的 MariaDB 10 2 它有以下编译错误 root mariadb 10 2 mysys ssl my md5 cc In function void md5 result MD
  • 嵌套 JSON 数组和 D3JS

    我正在尝试使用嵌套 json 数组通过 d3 js 绘制多系列图表 我在这个网站和其他网站上查看了很多地方 虽然有类似的主题 但我似乎无法使语法适用于我的特定问题 这是一个简单的问题 制作折线图 如下所示 http bl ocks org
  • 在 ScriptSharp 项目中对 C# 代码进行单元测试

    我使用 ScriptSharp 创建 RIA 应用程序 除了一些奇怪的地方之外 效果还不错 然而 使用 Firebug 查找和修复问题并不是很方便 由于 scriptsharp 还提供了一个 Dll 我希望使用一个单独的测试项目 使用 Nu
  • ReadString() 是否丢弃换行符后的字节?

    我正在尝试通过以下方式从网络连接读取数据 func getIn conn net Conn for in err bufio NewReader conn ReadString n if err nil fmt Printf err Err
  • 更正 Android 中的印地语 (Unicode) 渲染

    我成功添加了自定义字体 DroidSansFallBack ttf 以显示印地语字符而不是 Pre ICS 上的块 无论如何 4 1 上一切都运行良好 但 Froyo 和 Gingerbread 上的渲染顺序是错误的 我明白问题没有解决ht
  • Homebrew 拒绝链接 OpenSSL

    我正在使用 OSX 10 11 6 Homebrew 版本 0 9 9m OpenSSL 0 9 8zg 2015 年 7 月 14 日 我正在尝试使用 dotnetcore 并遵循他们的指示 我已经升级 安装了最新版本的 openssl
  • Excel 2007 中的 Application.filesearch 带循环

    我已经进行了多次搜索 并且在使用现在不存在的 filesearch 时很难找到正确的代码 我已经研究过使用 Dir 和 FileSystemObject 但在搜索后使用循环时没有任何混乱 我希望你能够帮助我得出一个更容易的结论 简而言之 我
  • excel 2007宏验证输入单元格的数据并显示消息框(如果不正确)

    请有人帮忙编写以下代码 它在以下行给我一个错误 Set range C5 L14 这是完整的代码 Private Sub Worksheet Change ByVal Target As Excel range Dim ws As Work
  • if-else 与 ifelse 与列表的比较

    为什么 if else 结构和函数 ifelse 的行为不同 mylist lt list list a 1 b 2 list x 10 y 20 l1 lt ifelse sum sapply mylist class list 0 my
  • 如何异步调用 AWS Lambda 函数

    有谁知道异步而不是同步调用 Amazon AWS Lambda 函数的当前正确方法 AWS Java SDK 中的 InvokeAsync API 仍然可用 但标记为已弃用 他们建议您使用 Invoke API 我不明白为什么他们会强迫我们
  • 捆绑脚本无法正常工作 MVC

    我捆绑了 jquery 验证脚本 例如 bundles Add new ScriptBundle bundles jqueryval Include Scripts jquery unobtrusive Scripts jquery val
  • 强制 VB.NET 生成与 C# 相同的字符串比较表达式?

    这里有些类似的问题 C 和 VB Net 字符串比较的区别 但和我现在问的不一样 我正在创建一个简单的表达式遍历器 它将 lambda 转换为 SQL WHERE 子句 我这样称呼它 GetEntities
  • 如何在 Android Studio 0.5.1 上导入模块?

    我刚刚将 Android Studio 更新到 0 5 1 我需要将 Facebook SDK 导入到我的项目中 下列的脸书的指南 我应该 使用 Command 向下箭头打开 项目结构 对话框 在 OS X 上 选择左侧导航栏下的模块 单击
  • Android:http登录没有达到预期的效果

    我似乎无法让登录页面正常工作 它一直告诉我我的用户名 密码不正确 而我显然知道它们不正确 所以我开始调试并弹出 log v 我发现了一些有趣的东西 查找显示 class LogMeIn extends AsyncTask
  • MySQL统计最近7天的数据

    我有以下架构 表票 Field Type Null Key Default Extra id int 10 NO PRI NULL auto increme