Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

แบบสอบถาม MySQL เพื่อจัดกลุ่มข้อมูลในรูปแบบของเวลาเข้าสู่ระบบของผู้ใช้ต่อชั่วโมงและรับบันทึกของผู้ใช้ที่เข้าสู่ระบบในชั่วโมงล่าสุด?


คุณสามารถใช้แบบสอบถามย่อยที่มีเงื่อนไข JOIN สำหรับสิ่งนี้ ไวยากรณ์มีดังนี้ −

SELECT yourTablevariableName.*FROM( SELECT MAX(UNIX_TIMESTAMP(yourDateTimeColumnName)) AS anyAliasName FROM getLatestHour GROUP BY HOUR(UserLoginDateTime)) yourOuterVariableNameJOIN yourTableName yourTablevariableNameON UNIX_TIMEColumName(yourDate) yourOuterVariableNameJOIN yourTableName yourTablevariableNameON UNIX_TIMEColumNameของคุณ ก่อน> 

เพื่อให้เข้าใจไวยากรณ์ข้างต้นและผลลัพธ์ที่จะได้รับ ให้เราสร้างตาราง แบบสอบถามเพื่อสร้างตารางมีดังนี้ −

mysql> สร้างตาราง getLatestHour -> ( -> UserId int, -> UserName varchar(20), -> UserLoginDateTime datetime -> ); ตกลง ตกลง 0 แถวได้รับผลกระทบ (0.68 วินาที)

ตอนนี้คุณสามารถแทรกบางระเบียนในตารางโดยใช้คำสั่งแทรก บันทึกเป็นบันทึกของผู้ใช้รวมถึงวันที่และเวลาเข้าสู่ระบบของผู้ใช้ แบบสอบถามมีดังนี้ −

mysql> แทรกลงในค่า getLatestHour(100,'John','2019-02-04 10:55:51');การสืบค้นตกลง, 1 แถวได้รับผลกระทบ (0.27 วินาที)mysql> แทรกลงในค่า getLatestHour (101,' Larry','2019-02-04 12:30:40');แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.16 วินาที)mysql> แทรกลงในค่า getLatestHour (102,'Carol','2019-02-04 12:40:46');แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.20 วินาที)mysql> แทรกลงในค่า getLatestHour(103,'David','2019-02-04 12:44:54');แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.17 วินาที )mysql> แทรกลงในค่า getLatestHour (104,'Bob','2019-02-04 12:47:59');แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.15 วินาที)

แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select แบบสอบถามมีดังนี้ −

mysql> เลือก *จาก getLatestHour;

ต่อไปนี้เป็นผลลัพธ์ -

<ก่อนหน้า>+---------+----------+---------------------+| รหัสผู้ใช้ | ชื่อผู้ใช้ | UserLoginDateTime |+-------+----------+---------------------+| 100 | จอห์น | 2019-02-04 10:55:51 || 101 | แลร์รี่ | 2019-02-04 12:30:40 || 102 | แครอล | 2019-02-04 12:40:46 || 103 | เดวิด | 2019-02-04 12:44:54 || 104 | บ๊อบ | 2019-02-04 12:47:59 |+-------+----------+------------------- ---+5 แถวในชุด (0.00 วินาที)

นี่คือแบบสอบถามเพื่อจัดกลุ่มข้อมูลต่อชั่วโมงและรับบันทึกของชั่วโมงล่าสุด แบบสอบถามมีดังนี้ −

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';

ต่อไปนี้เป็นผลลัพธ์ -

<ก่อนหน้า>+---------+----------+---------------------+| รหัสผู้ใช้ | ชื่อผู้ใช้ | UserLoginDateTime |+-------+----------+---------------------+| 100 | จอห์น | 2019-02-04 10:55:51 || 104 | บ๊อบ | 2019-02-04 12:47:59 |+-------+----------+------------------- ---+2 แถวในชุด (0.05 วินาที)