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