以每小時使用者登入時間形式對資料進行分組的 MySQL 查詢,以及獲取近期一小時登入使用者的記錄?


為此,你可以將子查詢與 JOIN 條件結合使用。語法如下:

SELECT yourTablevariableName.*
FROM
(
   SELECT MAX(UNIX_TIMESTAMP(yourDateTimeColumnName)) AS anyAliasName
   FROM getLatestHour
   GROUP BY HOUR(UserLoginDateTime)
) yourOuterVariableName
JOIN yourTableName yourTablevariableName
ON UNIX_TIMESTAMP(yourDateTimeColumnName) = yourOuterVariableName.yourAliasName
WHERE DATE(yourDateTimeColumnName) = 'yourDateValue';

為了理解上述語法及其產生的結果,我們先建立一個表。建立表的查詢如下:

mysql> create table getLatestHour
   -> (
   -> UserId int,
   -> UserName varchar(20),
   -> UserLoginDateTime datetime
   -> );
Query OK, 0 rows affected (0.68 sec)

你現在可以使用 insert 命令向表中插入一些記錄。這些記錄是使用者記錄,包括使用者登入日期和時間。查詢如下:

mysql> insert into getLatestHour values(100,'John','2019-02-04 10:55:51');
Query OK, 1 row affected (0.27 sec)
mysql> insert into getLatestHour values(101,'Larry','2019-02-04 12:30:40');
Query OK, 1 row affected (0.16 sec)
mysql> insert into getLatestHour values(102,'Carol','2019-02-04 12:40:46');
Query OK, 1 row affected (0.20 sec)
mysql> insert into getLatestHour values(103,'David','2019-02-04 12:44:54');
Query OK, 1 row affected (0.17 sec)
mysql> insert into getLatestHour values(104,'Bob','2019-02-04 12:47:59');
Query OK, 1 row affected (0.15 sec)

使用 select 語句顯示錶中的所有記錄。查詢如下:

mysql> select *from getLatestHour;

以下是輸出:

+--------+----------+---------------------+
| UserId | UserName | UserLoginDateTime   |
+--------+----------+---------------------+
|    100 | John     | 2019-02-04 10:55:51 |
|    101 | Larry    | 2019-02-04 12:30:40 |
|    102 | Carol    | 2019-02-04 12:40:46 |
|    103 | David    | 2019-02-04 12:44:54 |
|    104 | Bob      | 2019-02-04 12:47:59 |
+--------+----------+---------------------+
5 rows in set (0.00 sec)

以下是如何按小時對資料進行分組並獲取最近一小時的記錄的查詢。查詢如下:

mysql> SELECT tbl1.*
   -> FROM (
   -> SELECT MAX(UNIX_TIMESTAMP(UserLoginDateTime)) AS m1
   -> FROM getLatestHour
   -> GROUP BY HOUR(UserLoginDateTime)
   -> ) var1
   -> JOIN getLatestHour tbl1
   -> ON UNIX_TIMESTAMP(UserLoginDateTime) = var1.m1
   -> WHERE DATE(UserLoginDateTime) = '2019-02-04';

以下是輸出:

+--------+----------+---------------------+
| UserId | UserName | UserLoginDateTime   |
+--------+----------+---------------------+
|    100 | John     | 2019-02-04 10:55:51 |
|    104 | Bob      | 2019-02-04 12:47:59 |
+--------+----------+---------------------+
2 rows in set (0.05 sec)

更新於:2019 年 7 月 30 日

256 次瀏覽

開啟您的 職業生涯

完成課程,獲得認證

立即開始
廣告
© . All rights reserved.