【问题标题】:SQL getting number of records inserted in each hour of past 24 hoursSQL获取过去24小时内每小时插入的记录数
【发布时间】:2019-12-27 08:53:58
【问题描述】:

我正在尝试编写一个 SQL 查询,我需要在其中获取 过去 24 小时每小时插入的记录数。我偶然发现了这个查询:

SELECT HOUR(timeStamp), COUNT(*)
FROM `events`
WHERE timeStamp > DATE_SUB(NOW(), INTERVAL 24 HOUR)
GROUP BY HOUR(timeStamp)
ORDER BY HOUR(timeStamp)

原表:

+---------+----------+-----------+--------------+---------------------+------------------------+
| eventID | personID | eventName | eventContent | timeStamp           | dateModified           |
+---------+----------+-----------+--------------+---------------------+------------------------+
|       1 |        4 | Login     | Login        | 26-12-2019 17:43:24 | 2019-12-26 12:13:23 pm |
|       2 |        1 | Login     | Login        | 26-12-2019 17:43:39 | 2019-12-26 12:13:38 pm |
|       3 |        1 | Button    | Click        | 26-12-2019 17:43:40 | 2019-12-26 12:13:38 pm |
|       4 |        1 | Login     | Login        | 26-12-2019 17:43:56 | 2019-12-26 12:13:55 pm |
|       5 |        1 | Mouse     | Moved        | 26-12-2019 17:43:57 | 2019-12-26 12:13:56 pm |
|       6 |        4 | Login     | Login        | 26-12-2019 17:44:18 | 2019-12-26 12:14:18 pm |
|       7 |        4 | Logged Out| Logged Out   | 26-12-2019 17:44:20 | 2019-12-26 12:14:19 pm |
|       8 |        5 | Login     | Login        | 26-12-2019 17:49:42 | 2019-12-26 12:19:41 pm |
|       9 |        5 | Message   | Hello        | 26-12-2019 17:49:44 | 2019-12-26 12:19:43 pm |
|      10 |        5 | Login     | Login        | 26-12-2019 17:49:57 | 2019-12-26 12:19:57 pm |
|      11 |        1 | Login     | Login        | 26-12-2019 17:58:20 | 2019-12-26 12:28:20 pm |
|      12 |        8 | Login     | Login        | 26-12-2019 18:6:32  | 2019-12-26 12:36:31 pm |
|      13 |       54 | Login     | Login        | 26-12-2019 18:6:50  | 2019-12-26 12:36:49 pm |
|      14 |       29 | Login     | Login        | 26-12-2019 18:7:11  | 2019-12-26 12:37:11 pm |
|      15 |        1 | Message   | Hello        | 27-12-2019 13:51:48 | 2019-12-27 08:21:49 am |
|      16 |        1 | Login     | Login        | 27-12-2019 13:51:50 | 2019-12-27 08:21:52 am |
|      17 |        1 | Login     | Login        | 27-12-2019 13:52:26 | 2019-12-27 08:22:28 am |
|      18 |        1 | Login     | Login        | 27-12-2019 13:54:59 | 2019-12-27 08:25:00 am |
+---------+----------+-----------+--------------+---------------------+------------------------+

但是 SQL 给了我零输出:

object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(2) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) }

我期望的输出是 24 个数字,它们的位置表示每小时。

例如:12 2 4 5 14 83 23 12 2 5 7 9 56 0 1 23 54 27 45 14 0 65 23 15(这些不是表格中的实际数字。这是格式)

【问题讨论】:

  • 在 MySQL/MariaDB 中 HOUR() 函数接受 time 数据类型参数,而不是日期时间/时间戳。请改用EXTRACT(HOUR FROM timeStamp)
  • 还是一样的结果! @Akina
  • 我希望时间戳的格式为 yyyy-mm-dd hh:mm:ss 你是如何存储它的?
  • 您的时间戳似乎是一个字符串,而不是实际的时间戳。
  • 查询似乎是正确的,我已经检查了我的本地数据库。您的时间戳格式存在问题。

标签: mysql sql mariadb


【解决方案1】:

您的时间戳是一个字符串,要成功使用小时函数,您需要使用 str_to_date 转换它,例如 hour(str_to_date('26-12-2019 17:43:24','%d-%m-%Y % k:%i:%s'))

【讨论】:

  • 我改变了timeStamp字段的数据类型,也让它以适当的格式存储时间,结果还是一样
  • 您是否检查过代码仅使用 mysql 工作? (其他人说确实如此)如果确实如此,那么问题出在您的 php 代码上。
  • 刚刚检查过了。它在 MySQL 上完美运行。我会弄清楚PHP的问题所在。感谢您的帮助!
  • 刚刚发现问题。我没有选择字段作为带有名称的变量,因此它没有向 PHP 返回任何内容。
猜你喜欢
  • 1970-01-01
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多