Computer >> Máy Tính >  >> Lập trình >> MySQL

MySQL truy vấn để nhóm dữ liệu dưới dạng thời gian đăng nhập của người dùng mỗi giờ và lấy bản ghi của những người dùng đã đăng nhập trong giờ gần đây?

Bạn có thể sử dụng một truy vấn con với điều kiện JOIN cho việc này. Cú pháp như sau -

 CHỌN yourTablevariableName * FROM (SELECT MAX (UNIX_TIMESTAMP (yourDateTimeColumnName)) AS anyAliasName TỪ getLatestHour GROUP BY GIỜ (UserLoginDateTime)) yourOuterVariableNameJOIN yourTableName yourTablevariableNameON UNIX_TIMESTAMP (yourDateTimeColumnName) =yourOuterVariableName.yourAliasNameWHERE DATE (yourDateTimeColumnName) ='yourDateValue';.  

Để hiểu cú pháp trên và kết quả đạt được, chúng ta hãy tạo một bảng. Truy vấn để tạo bảng như sau -

 mysql> tạo bảng getLatestHour -> (-> UserId int, -> UserName varchar (20), -> UserLoginDateTime datetime ->); Truy vấn OK, 0 hàng bị ảnh hưởng (0,68 giây) 

Bây giờ bạn có thể chèn một số bản ghi trong bảng bằng cách sử dụng lệnh insert. Các bản ghi là các bản ghi người dùng bao gồm ngày và giờ đăng nhập của người dùng. Truy vấn như sau -

 mysql> insert vào getLatestHour giá trị (100, 'John', '2019-02-04 10:55:51'); Truy vấn OK, 1 hàng bị ảnh hưởng (0,27 giây) mysql> chèn vào getLatestHour giá trị (101, ' Larry ',' 2019-02-04 12:30:40 '); Truy vấn OK, 1 hàng bị ảnh hưởng (0,16 giây) mysql> chèn vào giá trị getLatestHour (102,' Carol ',' 2019-02-04 12:40:46 '); Truy vấn OK, 1 hàng bị ảnh hưởng (0,20 giây) mysql> chèn vào giá trị getLatestHour (103,' David ',' 2019-02-04 12:44:54 '); Truy vấn OK, 1 hàng bị ảnh hưởng (0,17 giây ) mysql> chèn vào giá trị getLatestHour (104, 'Bob', '2019-02-04 12:47:59'); Truy vấn OK, 1 hàng bị ảnh hưởng (0,15 giây) 

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng một câu lệnh chọn. Truy vấn như sau -

 mysql> select * from getLatestHour; 

Sau đây là kết quả -

 + -------- + ---------- + --------------------- + | UserId | Tên người dùng | 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 hàng trong bộ (0,00 giây) 

Đây là truy vấn để nhóm dữ liệu mỗi giờ và lấy bản ghi của giờ gần đây. Truy vấn như sau -

 mysql> SELECT tbl1. * -> FROM (-> SELECT MAX (UNIX_TIMESTAMP (UserLoginDateTime)) AS m1 -> FROM getLatestHour -> GROUP BY HOUR (UserLoginDateTime) ->) var1 -> THAM GIA getLatestHour tbl1 -> TRÊN UNIX_TIMESTAMP (UserLoginDateTime) =var1.m1 -> NGÀY NÀO (UserLoginDateTime) ='2019-02-04'; 

Sau đây là kết quả -

 + -------- + ---------- + --------------------- + | UserId | Tên người dùng | UserLoginDateTime | + -------- + ---------- + --------------------- + | 100 | John | 2019-02-04 10:55:51 || 104 | Bob | 2019-02-04 12:47:59 | + -------- + ---------- + ------------------ --- + 2 hàng trong bộ (0,05 giây)