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

เปรียบเทียบวันที่แรกและวันที่ล่าสุดในคอลัมน์ MySQL ด้วย TIME_TO_SEC, MIN, MAX

การคำนวณช่วงเวลาระหว่างวันที่แรกและล่าสุดต่อกลุ่ม

เพื่อหาความต่างของเวลาระหว่างวันที่เก่าที่สุด (MIN) และใหม่ที่สุด (MAX) ในคอลัมน์ DATETIME ต่อกลุ่ม เราแปลงเป็นวินาทีด้วย TIME_TO_SEC() คำนวณความต่าง แล้วแปลงกลับด้วย SEC_TO_TIME()

สร้างตารางและเพิ่มข้อมูล

mysql> CREATE TABLE DemoTable (
    UserName VARCHAR(100),
    UserPostDatetime DATETIME
);
Query OK, 0 rows affected (0.65 sec)

mysql> INSERT INTO DemoTable VALUES('Adam','2019-08-24 11:10:00');
mysql> INSERT INTO DemoTable VALUES('Adam','2019-08-24 11:20:00');
mysql> INSERT INTO DemoTable VALUES('Adam','2019-08-24 11:50:00');

แสดงข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable;

ผลลัพธ์:

+----------+---------------------+
| UserName | UserPostDatetime    |
+----------+---------------------+
| Adam     | 2019-08-24 11:10:00 |
| Adam     | 2019-08-24 11:20:00 |
| Adam     | 2019-08-24 11:50:00 |
+----------+---------------------+
3 rows in set (0.00 sec)

คำสั่งคำนวณช่วงเวลา (MAX - MIN) ต่อ UserName

mysql> SELECT UserName,
    SEC_TO_TIME(MAX(TIME_TO_SEC(UserPostDatetime)) - MIN(TIME_TO_SEC(UserPostDatetime))) AS t
    FROM DemoTable GROUP BY UserName;

ผลลัพธ์:

+----------+----------+
| UserName | t        |
+----------+----------+
| Adam     | 00:40:00 |
+----------+----------+
1 row in set (0.03 sec)

คำอธิบาย

  • TIME_TO_SEC(datetime) : แปลง DATETIME เป็นวินาทีสะสมนับจาก 00:00:00
  • MAX(...) - MIN(...) : ความต่างวินาทีระหว่างเวลาสุดท้ายและเวลาแรก
  • SEC_TO_TIME(seconds) : แปลงวินาทีกลับเป็นรูปแบบ HH:MM:SS
  • ในตัวอย่าง: 11:50:00 - 11:10:00 = 40 นาที = 00:40:00
  • วิธีนี้ทำงานได้แม้ข้ามวัน (จะได้ชั่วโมงมากกว่า 24)